力扣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};
      }
  };
相关推荐
noipp4 小时前
推荐题目:洛谷 P10907 [蓝桥杯 2024 国 B] 蚂蚁开会
c语言·c++·算法·编程·洛谷
程序员二叉5 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉5 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
青山木5 小时前
Hot 100 --- 轮转数组
java·数据结构·算法
徐小夕5 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
北域码匠6 小时前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
手写码匠7 小时前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
BomanGe17 小时前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
Matrix_118 小时前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影
WBluuue8 小时前
数据结构与算法:有序表(二):跳表
数据结构·c++·算法·skiplist