目录
一、25. K 个一组翻转链表 - 力扣(LeetCode)
二、 215. 数组中的第K个最大元素 - 力扣(LeetCode)
三、 15. 三数之和 - 力扣(LeetCode)
一、25. K 个一组翻转链表 - 力扣(LeetCode)
- 先遍历顺序表将节点都存在顺序表里面 便于交换
- 确定交换的组数,int kRotal = lists.size() / k;
- 一组一组的交换,不足一组的不需要交换
- 将交换完成的顺序表连起来,lists.get(0)返回,最后一个的next置空
public ListNode reverseKGroup(ListNode head, int k) {List<ListNode> lists = new ArrayList<>();while (head != null) {//存入顺序表lists.add(head);head = head.next;}//确定交换的组数int kRotal = lists.size() / k;int left = 0;int right = left + k - 1;while (kRotal-- > 0) {int tRight = right;int tLeft = left;while (tLeft < tRight) {ListNode temp = lists.get(tLeft);lists.set(tLeft, lists.get(tRight));lists.set(tRight, temp);tLeft++;tRight--;}left = right + 1;right = left + k - 1;}lists.get(lists.size() - 1).next = null;for (int i = 0; i < lists.size() - 1; i++) {lists.get(i).next = lists.get(i + 1);}return lists.get(0);}
二、 215. 数组中的第K个最大元素 - 力扣(LeetCode)
大根堆存一下
然后poll k-1次
最后堆顶就是第k大 peek一下
public int findKthLargest(int[] nums, int k) {PriorityQueue<Integer> queue = new PriorityQueue<>((a,b) -> b-a);for(int val : nums){queue.offer(val);}while(k > 1){queue.poll();k--;}return queue.peek();}
三、 15. 三数之和 - 力扣(LeetCode)
定住一个数 然后找两数之和,并去重
public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ret = new ArrayList<>();Arrays.sort(nums);for(int i = 0;i < nums.length;){int left = i+1;int target = nums[i];int right = nums.length - 1;while(left < right){if(nums[left] + nums[right] == -target){List<Integer> ret1 = new ArrayList<>();ret1.add(nums[left]);ret1.add(nums[right]);ret1.add(target);ret.add(ret1);left++;right--;while(left < right && nums[left] == nums[left-1]){left++;}while(left < right && nums[right] == nums[right+1]){right--;} }else if(nums[left] + nums[right] > -target){right--;}else{left++;}}i++;while(i < nums.length && nums[i] == nums[i-1]){i++;}}return ret;}