当前位置: 首页 > news >正文

有序矩阵中第K小的元素+二分查找

题目:
在这里插入图片描述
思考:

  1. 最直观的思路是不管矩阵性质,直接遍历后排序(二维变一维)但这复杂度太高且完全没有利用矩阵中相对有序的性质
  2. 第二种思路是拆分,n×n的矩阵,拆分成n个一维向量,这些一维向量都是有序的,相当于n个有序数组中找到第k小的,可以使用合并n个有序列表的方法,比如归并排序
  3. 但是第二种只使用到了有序矩阵中一个方向上的有序性质
  4. 使用二分查找,矩阵中最小的是matrix[0][0]设为min,最大的是matrix[n-1][n-1]设为max,利用二分查找实时查找矩阵中比(min+max)/2小的数的个数,刚好k个就找到了,小于k个说明真正的第k小元素要比(min+max)/2大,更新min的值,同理大于k个更新max的值
  5. 那么方法的重难点就在于查找比(min+max)/2小的数的个数,可以遍历每一行去找,但还是要利用矩阵性质,从矩阵右上角开始找,相当于 240. 搜索二维矩阵 II 的方法

实现:

class Solution {
public:int kthSmallest(vector<vector<int>>& matrix, int k) {int n=matrix.size();auto getCount=[&] (int mid)->int{int count=0;int x=0;int y=n-1;while(y>-1&&x<n){if (matrix[x][y]<=mid){count+=y+1;x++;}else{y--;}}return count;};int l=matrix[0][0];int r=matrix[n-1][n-1];while(l<=r){int mid=(l+r)/2;int count=getCount(mid);if (count<k){l=mid+1;}else{r=mid-1;}}return l;}
};
http://www.lryc.cn/news/617335.html

相关文章:

  • 使用 Rust 创建 32 位 DLL 的完整指南
  • 数据大集网:精准获客新引擎,助力中小企业突破推广困局
  • CSPOJ:1561: 【提高】买木头
  • 请求报文和响应报文(详细讲解)
  • nomachine的安装和使用
  • 零基础学习jQuery第三天
  • 用 Python 绘制企业年度财务可视化报告 —— 从 Excel 到 9 种图表全覆盖
  • DDIA第五章:分布式数据复制中的一致性与冲突处理
  • 第5节 大模型分布式推理通信优化与硬件协同
  • 在Debian上安装MySQL
  • Excel 实战:基因表达矩阵前处理中测序符号的快速剥离方法
  • golang 基础案例_02
  • 设计模式笔记_结构型_享元模式
  • 深入解析Prompt缓存机制:原理、优化与最佳实践
  • Agent在供应链管理中的应用:库存优化与需求预测
  • Python FastAPI + React + Nginx 阿里云WINDOWS ECS部署实战:从标准流程到踩坑解决全记录
  • typecho博客设置浏览器标签页图标icon
  • 【工控】线扫相机小结 第六篇
  • uncalled4
  • 麒麟系统使用-PATH设置
  • 【接口自动化】-7- 热加载和日志封装
  • 实战:用 PyTorch 复现一个 3 层全连接网络,训练 MNIST,达到 95%+ 准确率
  • 软件测试关于搜索方面的测试用例
  • DeepCompare文件深度对比软件:权限管理与安全功能全面解析
  • Android Audio实战——获取活跃音频类型(十五)
  • 安全合规4--下一代防火墙组网
  • 企业内外网物理隔离时文件怎么传输更安全
  • ChatML vs Harmony:深度解析OpenAI全新对话结构格式的变化
  • Linux 流编辑器 sed 详解
  • C#使用EPPlus读写Excel