【LeetCode】632. Smallest Range
来源:互联网 发布:实时直播软件下载 编辑:程序博客网 时间:2024/05/16 04:13
You have k
lists of sorted integers in ascending order. Find the smallest range that includes at least one number from each of the k
lists.
We define the range [a,b] is smaller than range [c,d] if b-a < d-c
or a < c
if b-a == d-c
.
题解:本题需要用到最小堆维持一列的数组元素。题意本质就是找一个数组每个数分别来自每一行中的某一个,使得这个数组最大数和最小数差最小,暴力遍历需要每次都要遍历来找最大数和最小数,由于题目每行数组都是有序的,所以可以维持一个最小堆从每行第一个数开始直到遍历完整个表,遍历过程更新差。注意这里重写优先队列cmp方法时只能用指针,不能传入外部参数,如下代码:
vector<int> smallestRange(vector<vector<int> >& nums) { struct cmp{ bool operator()(pair<int,int> p1,pair<int,int> p2){ return nums[p1.second][p1.first]>nums[p2.second][p1.first]; } }; priority_queue<pair<int,int>,vector<pair<int,int> >,cmp> pq; int lo=INT_MAX,hi=INT_MIN; for(int i=0;i<nums.size();i++) { lo=min(lo,nums[i][0]); hi=max(hi,nums[i][0]); pq.push({0,i}); } vector<int> ans={lo,hi}; while(true) { auto p=pq.top(); p.first++; pq.pop(); if(p.first==nums[p.second].size())break; pq.push(p); lo=nums[pq.top().second][pq.top().first]; hi=max(hi,nums[p.second][p.first]); if(hi-lo<ans[1]-ans[0])ans={lo,hi}; } return ans;}会产生:use of parameter from containing function
vector<int> smallestRange(vector<vector<int>>& nums) { typedef vector<int>::iterator vi; struct comp { bool operator()(pair<vi, vi> p1, pair<vi, vi> p2) { return *p1.first > *p2.first; } }; int lo = INT_MAX, hi = INT_MIN; priority_queue<pair<vi, vi>, vector<pair<vi, vi>>, comp> pq; for (auto &row : nums) { lo = min(lo, row[0]); hi = max(hi, row[0]); pq.push({row.begin(), row.end()}); } vector<int> ans = {lo, hi}; while (true) { auto p = pq.top(); pq.pop(); ++p.first; if (p.first == p.second) break; pq.push(p); lo = *pq.top().first; hi = max(hi, *p.first); if (hi - lo < ans[1] - ans[0]) ans = {lo, hi}; } return ans; }
阅读全文
0 0
- leetcode 632. Smallest Range
- [LeetCode]632. Smallest Range
- [leetcode]632. Smallest Range
- 【LeetCode】632. Smallest Range
- leetcode题解 632. Smallest Range
- LeetCode Add to List 632. Smallest Range
- [python]leetcode(632). Smallest Range
- Leetcode | Smallest Range(Hard)
- 632. Smallest Range
- 632. Smallest Range
- 632. Smallest Range
- [LeetCode]632. Smallest Range 深入浅出讲解和代码示例
- leetcode 632. Smallest Range 典型的移动窗口做法
- leetCode 483. Smallest Good Base
- [leetcode]483. Smallest Good Base
- [Leetcode]Range Sum Query
- LeetCode 370. Range Addition
- leetcode Range Addition
- python中的list和array的不同及Python的各种推导式
- 【iis】部署网站及其注意事项
- 日本究竟发达到什么程度?
- LeetCode编程练习
- 生产者消费者问题
- 【LeetCode】632. Smallest Range
- 在ORACLE中给已有数据的表增加、修改、删除一个字段(或一个列)或者多个字段(或多个列)的问题
- int ,long , long long类型的范围
- oracle 游标变量ref cursor详解
- bootstrap列表js
- SourceTreeSetup-2.3.1.0.exe安装登录不了或一直卡在登录问题解决
- DataGridView
- C# WPF 文件操作
- Java实现多线程环境下的计数器功能