[LeetCode] 373. Find K Pairs with Smallest Sums
来源:互联网 发布:安卓扒谱软件 编辑:程序博客网 时间:2024/06/06 00:41
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:
Given nums1 = [1,7,11], nums2 = [2,4,6], k = 3Return: [1,2],[1,4],[1,6]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:
Given nums1 = [1,1,2], nums2 = [1,2,3], k = 2Return: [1,1],[1,1]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:
Given nums1 = [1,2], nums2 = [3], k = 3 Return: [1,3],[2,3]All possible pairs are returned from the sequence:[1,3],[2,3]
// 直接上最小堆,但是nums1、nums2已排序的信息没有利用上。class Solution {public: vector<pair<int, int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) { auto cmp = [](pair<int, int>& p1, pair<int, int>& p2) { return p1.first + p1.second > p2.first + p2.second; }; priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> pq(cmp); for (auto num1 : nums1) { for (auto num2 : nums2) { pq.push(make_pair(num1, num2)); } } vector<pair<int, int>> res; while (k-- && !pq.empty()) { res.push_back(pq.top()); pq.pop(); } return res; }};
class Solution {public: vector<pair<int, int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) { if (k == 0 || nums1.size() == 0 || nums2.size() == 0) return {}; auto cmp = [nums1, nums2](pair<int, int>& p1, pair<int, int>& p2) { return nums1[p1.first] + nums2[p1.second] > nums1[p2.first] + nums2[p2.second]; }; priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> pq(cmp); for (int i = 0; i < nums1.size() && i < k; i++) pq.emplace(i, 0); vector<pair<int, int>> res; while (!pq.empty() && k--) { auto pair = pq.top(); pq.pop(); if (pair.second + 1 < nums2.size()) pq.emplace(pair.first, pair.second + 1); res.emplace_back(nums1[pair.first], nums2[pair.second]); } return res; }};
class Solution {public: vector<pair<int, int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) { if (k == 0 || nums1.size() == 0 || nums2.size() == 0) return {}; vector<int> partnerid(min(k, (int)nums1.size()), 0); vector<pair<int, int>> res; int sz = min(k, (int)(nums1.size() * nums2.size())); while (sz--) { int minsum = INT_MAX, minidx = 0; for (int i = 0; i < partnerid.size(); i++) { if (partnerid[i] < nums2.size()) { int tmpsum = nums1[i] + nums2[partnerid[i]]; if (tmpsum < minsum) { minsum = tmpsum; minidx = i; } } } res.emplace_back(nums1[minidx], nums2[partnerid[minidx]]); partnerid[minidx]++; } return res; }};
阅读全文
0 0
- 【Leetcode】Find K Pairs with Smallest Sums
- leetcode Find K Pairs with Smallest Sums
- leetcode Find K Pairs with Smallest Sums
- LeetCode: Find K Pairs with Smallest Sums
- Leetcode: Find K Pairs with Smallest Sums
- leetcode-Find K Pairs with Smallest Sums
- leetcode 373. Find K Pairs with Smallest Sums
- LeetCode—373. Find K Pairs with Smallest Sums
- [leetcode] 373. Find K Pairs with Smallest Sums
- [leetcode] 373. Find K Pairs with Smallest Sums 解题报告
- leetcode.373. Find K Pairs with Smallest Sums
- LeetCode 373. Find K Pairs with Smallest Sums
- Leetcode 373. Find K Pairs with Smallest Sums(Python)
- [leetcode]373. Find K Pairs with Smallest Sums -- JavaScript代码
- [leetcode] 373. Find K Pairs with Smallest Sums
- leetcode 373. Find K Pairs with Smallest Sums
- Leetcode 373. Find K Pairs with Smallest Sums
- [LeetCode]373. Find K Pairs with Smallest Sums
- Codeforces 845A Chess Tourney
- relation window窗口source insight查看函数的上一级调用
- 基于JQuery的轮播图插件nivo-slider使用教程
- 最近在编写一些bat工具时,发现自己对lua的io和正则表达式使用没什么了解,网络上转载解决问题后的文章。
- Node.js的安装
- [LeetCode] 373. Find K Pairs with Smallest Sums
- ospf不同进程下的邻居状态
- 用最小二乘法拟合一元线性方程y=ax+b
- mediawiki常用设置
- js 中的call 和 apply
- 激活函数、损失函数与超参数
- 推荐-高质量C++/C编程指南(林锐)
- 前端技巧:文本框输入字母变为大写
- Android在web view中监听屏幕双击的两种方式onClick与onTouch