Advertisement
nikunjsoni

373

May 27th, 2021
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {
  4.         vector<vector<int>> result;
  5.         if (nums1.empty() || nums2.empty() || k <= 0)
  6.             return result;
  7.        
  8.         auto comp = [&nums1, &nums2](pair<int, int> a, pair<int, int> b) {
  9.             return nums1[a.first] + nums2[a.second] > nums1[b.first] + nums2[b.second];};
  10.         priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(comp)> min_heap(comp);
  11.         min_heap.emplace(0, 0);
  12.        
  13.         while(k-- && min_heap.size()){
  14.             auto idx_pair = min_heap.top(); min_heap.pop();
  15.             result.push_back({nums1[idx_pair.first], nums2[idx_pair.second]});
  16.             if (idx_pair.first + 1 < nums1.size())
  17.                 min_heap.emplace(idx_pair.first + 1, idx_pair.second);
  18.             if (idx_pair.first == 0 && idx_pair.second + 1 < nums2.size())
  19.                 min_heap.emplace(idx_pair.first, idx_pair.second + 1);
  20.         }
  21.         return result;
  22.     }
  23. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement