373. Find K Pairs with Smallest Sums
Medium
65650FavoriteShare
You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k.
Define a pair (u,v) which consists of one element from the first array and one element from the second array.
Find the k pairs (u1,v1),(u2,v2) ...(uk,vk) with the smallest sums.
Example 1:
Input: nums1 = [1,7,11], nums2 = [2,4,6], k = 3 Output: [[1,2],[1,4],[1,6]] Explanation: The first 3 pairs are returned from the sequence: [1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6]
Example 2:
Input: nums1 = [1,1,2], nums2 = [1,2,3], k = 2 Output: [1,1],[1,1] Explanation: The first 2 pairs are returned from the sequence: [1,1],[1,1],[1,2],[2,1],[1,2],[2,2],[1,3],[1,3],[2,3]
Example 3:
Input: nums1 = [1,2], nums2 = [3], k = 3 Output: [1,3],[2,3] Explanation: All possible pairs are returned from the sequence: [1,3],[2,3]
class Solution {
public:
static bool Cmp(const vector<int> &a,const vector<int>& b){
return (a[0] + a[1]) < (b[0] + b[1]);
}
vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {
vector<vector<int>> Result;
if(nums1.empty() || nums2.empty()){
return Result;
}
for(int i = 0;i < nums1.size();i ++){
for(int j = 0;j < nums2.size();j ++){
vector<int> tmp(2);
tmp[0] = nums1[i];
tmp[1] = nums2[j];
Result.push_back(tmp);
}
}
sort(Result.begin(),Result.end(),Cmp);
vector<vector<int>> Res;
if(k <= Result.size()){
Res.assign(Result.begin(),Result.begin() + k);
}
else{
Res.assign(Result.begin(),Result.begin() + Result.size());
}
return Res;
}
};
程序分析:时间复杂度O(n²),空间复杂度O(n),这并不是一个好方法!注意vector如何使用assign()函数进行拷贝,vector是如何自定义排序函数Cmp()的。