考察的知识点:贪心;

解答方法分析:

  1. 定义了一个二维向量 res,用于存储结果。
  2. 声明一个最小堆 minHeap,用于存储每个可能的和的对,并按照和的大小进行排序。最小堆的大小始终为k,当超过k个和的对时,将会去掉最小的那个。
  3. 使用嵌套的循环遍历两个输入数组 pricesA 和 pricesB 的所有可能组合,并将它们的和以及对应的数组元素放入最小堆中。
  4. 每次从最小堆中取出一个和的对时,将它们的数组元素存入结果向量 res,并且计数器 count 加一。
  5. 当最小堆为空或者计数器 count 达到了k,结束循环,并返回结果向量 res。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pricesA int整型vector
     * @param pricesB int整型vector
     * @param k int整型
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > kPairsWithLargestSums(vector<int>& pricesA,
            vector<int>& pricesB, int k) {
        int m = pricesA.size();
        int n = pricesB.size();
        vector<vector<int>> res;
        priority_queue<pair<int, pair<int, int>>>
        minHeap;
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                minHeap.push(make_pair(pricesA[i] + pricesB[j], make_pair(pricesA[i],
                                       pricesB[j])));
            }
        }
        int count = 0;
        while (!minHeap.empty() && count < k) {
            auto top = minHeap.top();
            minHeap.pop();
            int priceA = top.second.first;
            int priceB = top.second.second;
            res.push_back({priceA, priceB});
            count++;
        }
        return res;
    }
};