摘要:题目链接先把一组里面和另外一组最小元素的组合放进,然后每次出和最小的,同时放进去有可能成为第二小的组合,即当前元素的下一个和元素的组合。
373. Find K Pairs with Smallest Sums
题目链接:https://leetcode.com/problems...
greedy: 先把一组x里面和另外一组y最小元素的组合放进heap,然后每次poll出和最小的,同时放进去有可能成为第二小的组合,即当前y元素的下一个和x元素的组合。
public class Solution { public ListkSmallestPairs(int[] nums1, int[] nums2, int k) { if(nums1.length == 0 || nums2.length == 0) return new ArrayList(); // heap: [nums1[i], nums2[j], i, j] PriorityQueue minHeap = new PriorityQueue<>(k, (a, b) -> a[0] + a[1] - (b[0] + b[1])); // add combination of element from one array with the first element of another for(int i = 0; i < Math.min(nums1.length, k); i++) { minHeap.offer(new int[] {nums1[i], nums2[0], i, 0}); } // greedy List result = new ArrayList(); while(k-- > 0 && !minHeap.isEmpty()) { int[] cur = minHeap.poll(); int i = cur[2], j = cur[3]; result.add(new int[] {cur[0], cur[1]}); if(j + 1 < nums2.length) minHeap.offer(new int[] {nums1[i], nums2[j + 1], i, j + 1}); } return result; } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66628.html
摘要:题目要求两个单调递增的整数数组,现分别从数组和数组中取一个数字构成数对,求找到个和最小的数对。思路这题采用最大堆作为辅助的数据结构能够完美的解决我们的问题。每从堆中取走一个数对,就插入,从而确保堆中的数对都可以从小到大遍历到。 题目要求 You are given two integer arrays nums1 and nums2 sorted in ascending order ...
摘要:利用特点进行排序。我们需要构建一个数据结构,一个表示在的位置,一个表示在的位置,他们的和,用来排序。我们首先向里,和所有的元素的和。每次我们一组数,然后增加的会自然的进行排序。 Given nums1 = [1,7,11], nums2 = [2,4,6], k = 3 Return: [1,2],[1,4],[1,6] The first 3 pairs are returne...
摘要:复杂度是,其中。这做法和异曲同工。看了网上给的解法,没有二分,二分的是结果。每次找到一个,然后求比它小的元素的个数,根据个数大于还是小于来二分。参考算的时候可以优化 378. Kth Smallest Element in a Sorted Matrix 题目链接:https://leetcode.com/problems... 求矩阵里面第k小的数,首先比较容易想到的是用heap来做...
阅读 2946·2021-11-24 09:39
阅读 2856·2021-09-29 09:34
阅读 3547·2021-09-24 10:23
阅读 1727·2021-09-22 15:41
阅读 1686·2019-08-30 15:55
阅读 3502·2019-08-30 13:58
阅读 2611·2019-08-30 13:11
阅读 1660·2019-08-29 12:31