首页 > 其他分享 >排序链表 重排链表 最接近目标价格的甜点成本 环形链表

排序链表 重排链表 最接近目标价格的甜点成本 环形链表

时间:2022-12-04 17:24:13浏览次数:46  
标签:target int ans list 甜点 链表 重排 cur

148. 排序链表

弄到数组里,数组排序,再弄个新链表
List list = new ArrayList<>();
ListNode pre = head;
while(pre != null) {
list.add(pre.val);
pre = pre.next;
}
int[] ans = new int[list.size()];
for(int i = 0; i < list.size(); i++) {
ans[i] = list.get(i);
}
Arrays.sort(ans);
ListNode root = new ListNode(0);
head = root;
for(int i : ans) {
ListNode cur = new ListNode(i);
root.next = cur;
root = root.next;
}
return head.next;


143. 重排链表

List list = new ArrayList<>();直接将节点存储在list中
ListNode root = head;
while(root != null) {
list.add(root);
root = root.next;
}
int left = 0;
int right = list.size() - 1;
while(left < right) {
list.get(left).next = list.get(right);交替
left++;
if(left == right) break;注意细节
list.get(right).next = list.get(left);
right--;
}
list.get(left).next = null;


1774. 最接近目标价格的甜点成本

int ans = Integer.MAX_VALUE;
public int closestCost(int[] baseCosts, int[] toppingCosts, int target) {
for(int i : baseCosts) {
ans = Math.min(ans, i);
}
/ans = Arrays.stream(baseCosts).min().getAsInt();/
for(int i : baseCosts) {
dfs(toppingCosts, 0, i, target);记录不同起始值,更新到的答案
}
return ans;
}
public void dfs(int[] toppingCosts, int len, int cur, int target) {
if(Math.abs(ans - target) < cur - target) return ;细节:若是已经超过了target且差值还大于ans的可以直接剪去。因为后面的添加只会让差值越来越大
else if(Math.abs(ans - target) >= Math.abs(cur - target)) {
if(Math.abs(ans - target) > Math.abs(cur - target)) {
ans = cur;
}else {误差一样,选择成本少的
ans = Math.min(ans, cur);
}
}
if(len == toppingCosts.length) {
return ;
}
dfs(toppingCosts, len + 1, cur + toppingCosts[len] * 2, target);
dfs(toppingCosts, len + 1, cur + toppingCosts[len], target);
dfs(toppingCosts, len + 1, cur, target);
}


141. 环形链表

Set set = new HashSet<>();
if(head == null) return false;
while(head.next != null) {
if(!set.add(head)) {细节:set中如果添加已添加的元素,会返回false
return true;
}
head = head.next;
}
return false;

标签:target,int,ans,list,甜点,链表,重排,cur
From: https://www.cnblogs.com/xtag/p/16950219.html

相关文章

  • 动态链表的创建
    一、内存的两种访问方式1、随机访问方式对于数组来说,他的所有元素在内存中是连续存储的,因而很容易计算出每个元素的内存地址,从而可以直接访问数组中的任意一个元素。2、顺序......
  • 两两交换链表中的节点-LeetCode24模拟节点
    力扣链接:https://leetcode.cn/problems/swap-nodes-in-pairs/题目给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完......
  • 1774. 最接近目标价格的甜点成本 ----- 枚举
    你打算做甜点,现在需要购买配料。目前共有n种冰激凌基料和m种配料可供选购。而制作甜点需要遵循以下几条规则:必须选择一种冰激凌基料。可以添加一种或多种配料,也可......
  • 1774. 最接近目标价格的甜点成本
    1774.最接近目标价格的甜点成本暴力classSolution{List<Integer>list=newArrayList<>();intm;intt;publicintclosestCost(int[]baseCos......
  • 回文链表-python
    问题:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。思考:对称结构要想到stack方案一:双指针法将节点值赋值到数组......
  • 数据结构与算法__01--单链表无顺序添加时,节点对象形成封闭环问题,无法添加同一个对象导
    1进行对象是否相同的判断创建辅助节点temp遍历链表,找到最后未到最后,将temp后移当退出while循环时,temp就指向了链表的最后判断add的节点对象是否存在,若存在则不添......
  • 删除排序链表中的重复元素 删除排序链表中的重复元素 II 旋转链表 字符串中第二大的
    83.删除排序链表中的重复元素if(head==null)returnnull;ListNodepre=head;while(pre.next!=null){if(pre.val==pre.next.val){pre.next=pre.next.nex......
  • 反转链表
    92.反转链表给你单链表的头指针head和两个整数left和right,其中left<=right。请你反转从位置left到位置right的链表节点,返回反转后的链表构建一个虚拟节......
  • 静态链表
    链表的含义:将若干个结构体变量通过结构体指针联系在一起的数据结构。结点的概念:链表中的结构体变量称为链表的结点。链表的结点构成:在链表结点中纪要存储数据,也要存储下一个......
  • 算法--数组、链表、栈、队列
    一、数组1、删除有序数组中的重复项(简单)题目地址:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/给你一个升序排列的数组nums,请你原地删除重......