Untitled
unknown
plain_text
2 years ago
2.4 kB
7
Indexable
class Solution {
public:
vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {
int n=nums1.size(), m=nums2.size();
vector<vector<int>> ans;
priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>> ,greater<pair<int,pair<int,int>>>> pq;
for(int i=0;i<n;i++){
pq.push({nums1[i]+nums2[0],{i,0}});
}
while(!pq.empty() && k--){
pair<int,pair<int,int>> tmp=pq.top();
pq.pop();
int x=tmp.second.first;
int y=tmp.second.second;
ans.push_back({nums1[x],nums2[y]});
if(y!=m-1){
pq.push({nums1[x]+nums2[y+1],{x,y+1}});
}
}
return ans;
}
};
/*
class small{
public:
bool operator()(const int& a,const int& b){
return a>b;
}
};
class Solution { //wrong approach
public:
vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {
priority_queue<int,vector<int>,small> pq1;
priority_queue<int,vector<int>,small> pq2;
for(int i=0;i<nums1.size();i++) pq1.push(nums1[i]);
for(int i=0;i<nums2.size();i++) pq2.push(nums2[i]);
vector<vector<int>> ans;
while(k>0 && pq1.size()>1 && pq2.size()>1){ // NO CHEKS FOR EMPTYNESS
if(pq1.top() < pq2.top()){
int t2=pq2.top();
pq2.pop();
ans.push_back({pq1.top(),t2});
}
else{
int t1=pq1.top();
pq1.pop();
ans.push_back({t1,pq2.top()});
}
k--;
//if(pq1.empty() || pq2.empty()) break;
}
if(k==0) return ans;
if(pq1.size()==1 && pq2.size()>1){
int t1=pq1.top();
while(k>0 && !pq2.empty()){
int t2=pq2.top();
pq2.pop();
ans.push_back({t1,t2});
k--;
}
}
if(pq1.size()>1 && pq2.size()==1){
int t2=pq2.top();
while(k>0 && !pq1.empty()){
int t1=pq1.top();
pq1.pop();
ans.push_back({t1,t2});
k--;
}
}
return ans;
}
}; */Editor is loading...