力扣632.最小区间

力扣632.最小区间

  • 贪心 + 最小堆

    • 用一个小根堆维护K个数
    • 其中最小的算完结果后弹出,再补一个进去
cpp 复制代码
  class Solution {
  public:
      vector<int> smallestRange(vector<vector<int>>& nums) {
          int l=0,r=INT_MAX;
          int n = nums.size();
          //记录下一个位置的下标
          vector<int> next(n);
          //按照数值排序
          auto cmp = [&](const int &u,const int &v)
          {
              return nums[u][next[u]] > nums[v][next[v]];
          };
          //
          priority_queue<int,vector<int>,decltype(cmp)> pq(cmp);
          //当前的上下限
          int minval = 0,maxval = INT_MIN;
          //把所有列表放进去
          for(int i=0;i<n;i++)
          {
              pq.emplace(i);
              maxval = max(maxval,nums[i][0]);
          }
          while(true)
          {
              //最小数的下标
              int row = pq.top();
              pq.pop();
              minval = nums[row][next[row]];
              //更优
              if(maxval - minval < r - l)
                  l = minval , r = maxval;
              //当前列表全部遍历过了
              if(next[row] == nums[row].size() - 1)
                  break;
              //next往后移动一位
              next[row] ++;
              //更新当前k个数中最大值
              maxval = max(maxval,nums[row][next[row]]);
              pq.emplace(row);
          }
          return {l,r};
      }
  };
相关推荐
Dizzy.5173 小时前
数据结构(查找)
数据结构·学习·算法
hello_simon4 小时前
【Word转PDF】在线Doc/Docx转换为PDF格式 免费在线转换 功能强大好用
职场和发展·pdf·word·学习方法·word转pdf·石墨文档·word转换
分别努力读书6 小时前
acm培训 part 7
算法·图论
武乐乐~6 小时前
欢乐力扣:赎金信
算法·leetcode·职场和发展
'Debug6 小时前
算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)
算法
Fansv5877 小时前
深度学习-2.机械学习基础
人工智能·经验分享·python·深度学习·算法·机器学习
测试19988 小时前
接口测试工具:Postman
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
yatingliu20198 小时前
代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数 、1. 两数之和
c++·算法
uhakadotcom8 小时前
Google DeepMind最近发布了SigLIP 2
人工智能·算法·架构
sjsjs118 小时前
【数据结构-并查集】力扣1202. 交换字符串中的元素
数据结构·leetcode·并查集