从链表中移除在数组中存在的节点
题目
3217. 从链表中移除在数组中存在的节点 - 力扣(LeetCode)
思路
直接模拟
代码
public ListNode modifiedList(int[] nums, ListNode head) {ListNode node = new ListNode();node.next = head;List<Integer> list = new ArrayList<>();for(int a:nums){list.add(a);}ListNode cur = node;while(cur.next!=null){if(list.contains(cur.val)){cur.next=cur.next.next;}else{cur=cur.next;}}return node.next;}
小张刷题日记
题目
LCP 12. 小张刷题计划 - 力扣(LeetCode)
思路
- 首先当数组长度小于等于刷题日期长度时,每天都可以使用求助,所以最小时间为0。
- 使用二分查找找出最小的刷题日期长度,最大值为数组所以元素之和,最小值为0。
- 判断当前maxTime是否能完成刷题,不断更新二分查找的值。
代码
public int minTime(int[] time, int m) {if(time.length<=m){return 0;}int l = 0, r = Arrays.stream(time).sum();while(l<r){int mid = (l+r)/2;if(check(time,mid,m)){r = mid;}else{l = mid + 1;}}return l;}private boolean check(int[] time, int maxTime, int m) {int days = 1;//当前天数int curr = 0;//当前数组下标int sum = 0;//当前日期的刷题时长int max = 0;//当前日期的最大刷题时长while(curr<time.length){sum = sum + time[curr];max = Math.max(time[curr],max);if(sum - max > maxTime){//判断使用完求助机会是否能完成当前题目days++;if(days>m){//超出天数return false;}sum = time[curr];max = sum;}curr++;}return true;}