class Solution {
public:
struct Node{
int x;
int y;
int v;
Node(int a,int b,int c):x(a),y(b),v(c){}
bool operator < (const Node& other) const{
if(this->v < other.v) return true;
return false;
}
};
vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {
int N = nums1.size();
int M = nums2.size();
k = min(k,N*M);
priority_queue<Node> pq;
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(pq.size() < k) pq.push(Node(nums1[i],nums2[j],nums1[i]+nums2[j]));
else{
if(nums1[i]+nums2[j] < pq.top().v){
pq.pop();
pq.push(Node(nums1[i],nums2[j],nums1[i]+nums2[j]));
}
}
}
}
vector<vector<int>> ans(k,vector<int>(2,0));
int cnt = k-1;
while(!pq.empty()){
ans[cnt][0] = pq.top().x;
ans[cnt][1] = pq.top().y;
cnt--;
pq.pop();
}
return ans;
}
};
No.111 - LeetCode373
最新推荐文章于 2023-01-10 20:52:01 发布