具体思路:
没有看出来是最小堆问题,光想着双指针怎么调整了。
具体代码:
class Solution {
public:
vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {
int m=nums1.size();
int n=nums2.size();
auto cmp=[](pair<int,int>& pa,pair<int,int>& pb){
return pa.first+pa.second<pb.first+pb.second;
};
priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(cmp)>pri(cmp);
for(int i=0;i<k&&i<m;i++){
for(int j=0;j<k&&j<n;j++){
if(pri.size()<k){
pri.push({nums1[i],nums2[j]});
}else if(pri.top().first+pri.top().second>nums1[i]+nums2[j]){
pri.pop();
pri.push({nums1[i],nums2[j]});
}
}
}
vector<vector<int>>ret;
while(!pri.empty()){
k--;
ret.insert(ret.begin(),{pri.top().first,pri.top().second});
cout<<ret[0][0]<<" "<<ret[0][1]<<endl;
pri.pop();
}
return ret;
}
};