leetcode 373 查找和最小的k对数字(优先队列)

news/2024/11/29 8:52:27/

题目描述:
给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k。

定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。

找到和最小的 k 对数字 (u1,v1), (u2,v2) … (uk,vk)。

示例 1:

输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3
输出: [1,2],[1,4],[1,6]
解释: 返回序列中的前 3 对数:
[1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6]

思路:
当要求前K小或者前K大,都利用优先队列

代码如下:

class Solution {
public:struct cmp{bool operator()(pair<int,int>a,pair<int,int>b){return a.first+a.second<b.first+b.second;}};vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {priority_queue<pair<int,int>,vector<pair<int,int>>,cmp>q;vector<vector<int>>res;for(int i=0;i<nums1.size();i++){for(int j=0;j<nums2.size();j++){if(q.size()<k){q.push({nums1[i],nums2[j]});}else if(nums1[i]+nums2[j]<q.top().first+q.top().second){q.pop();q.push({nums1[i],nums2[j]});}}}while(!q.empty()){pair<int,int>top=q.top();res.push_back({top.first,top.second});q.pop();}return res;}
};

http://www.ppmy.cn/news/825642.html

相关文章

【LeetCode】373 and 682

查找和最小的k对数 思路&#xff1a; 该题一开始想用双指针来做&#xff0c;哪个指针与下一个数之前的gap越小&#xff0c;则移动哪个指针。这对k比较小的情况能够求解&#xff0c;但是k比较大时&#xff0c;需要回退至之前的元素&#xff0c;而双指针却做不到&#xff0c;得用…

力扣 373. 查找和最小的K对数字

题目 给定两个以 升序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 示例 输入: nums1 [1,7,11], nums2 [2…

leetcode:373. 查找和最小的 K 对数字

题目来源 leetcode&#xff1a;373. 查找和最小的 K 对数字 题目描述 class Solution { public:vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {} };题目解析 分析数据 数据量非常大&#xff0c;如果…

模拟卷Leetcode【普通】373. 查找和最小的K对数字

汇总&#xff1a;模拟卷Leetcode 题解汇总 373. 查找和最小的K对数字 给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (…

373、对网络中容易出现的故障归纳

运维人最怕网络出故障。先抛开一些闲话不谈&#xff0c;网络故障从大体上来讲&#xff0c;有下面几种情况&#xff1a; // 硬件问题 // 既然网络设备是一台机器&#xff0c;就有可能出现“疲劳”&#xff0c;从而导致各种各样的硬件故障出现。硬件的故障&#xff0c;一般有下面…

**Leetcode 373. 查找和最小的 K 对数字

力扣 类似第k小素分数 核心思路&#xff1a;pair的第二个数枚举&#xff0c;作为初始化&#xff0c;假设第二个数有m种可能&#xff0c;等于有m个队列&#xff0c;那么就等于从nums1里面逐步加入数&#xff0c;等价于多路合并队列 每个队列往后走一步&#xff0c;具体看代码 …

LeetCode刷题——查找和最小的 K 对数字#373#Medium

查找和最小的 K 对数字的思路探讨与源码 查找和最小的 K 对数字的题目如下图&#xff0c;该题属于数组类和队列类型的题目&#xff0c;主要考察对于排序方法的使用和数组结构的理解。本文的题目作者想到2种方法&#xff0c;分别是多路归并方法和优先队列方法&#xff0c;其…

Leetcode 373. 查找和最小的K对数字 (自定义优先队列)

先将nums1的前k个元素和nums2第一个元素的下标构成的和放到优先队列中&#xff0c;弹出最小的元素后&#xff0c;让nums2后面的元素补位&#xff0c;即依次得到后面小的数。 using PII pair<int, int>; class Solution { public:vector<vector<int>> kSmal…