当前位置:网站首页>378. 有序矩阵中第 K 小的元素
378. 有序矩阵中第 K 小的元素
2022-07-29 20:16:00 【小卢要刷力扣题】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。
你必须找到一个内存复杂度优于 O(n2) 的解决方案。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
给定一个目标,想知道<= 100的数有几个,怎么快能求出来?
往左走,获得0个
走到90,左边的都是小于100的数,获得左边的数量
往下走,小于等于100的,加左边的数,
就这样一直卡到结束,你正确的获得整个数组中有多少个数<=100
二分
整个数组中最小的是谁?左上角的数
那整个数组中,最大的数是谁?右下角的数
第一百小的数一定在一到1000之间, 看看<= 500的数有几个?
如果<=500有200个,目标大了
有可能最后得到<=785的数有100个,但是数组中没有这个数,应该是< =785并离它最近的数
我每次让你过的时候求俩信息,
第一,小于等于某一个值个数有几个,
第二,最接近它的是谁?
代码
class Solution {
public static class Info{
public int near;
public int num;
public Info(int n1,int n2){
near=n1;
num=n2;
}
}
public Info noMoreNum(int[][] matrix,int value){
int near=Integer.MIN_VALUE;
int num=0;
int n=matrix.length;
int m=matrix[0].length;
int row=0;
int col=m-1;
while(row<n&&col>=0){
if(matrix[row][col]<=value){
near=Math.max(near,matrix[row][col]);
num+=col+1;
row++;
}else{
col--;
}
}
return new Info(near,num);
}
public int kthSmallest(int[][] matrix, int k) {
int n=matrix.length;
int m=matrix[0].length;
int left=matrix[0][0];
int right=matrix[n-1][m-1];
int ans=0;
while(left<=right){
int mid=left+((right-left)>>1);
Info info=noMoreNum(matrix,mid);
if(info.num<k){
left=mid+1;
}else{
ans=info.near;
right=mid-1;
}
}
return ans;
}
}
边栏推荐
- JS实现百叶窗特效
- LeetCode_474_一和零
- Chrome——插件推荐
- Safe Browser will have these hidden features that will let you play around with your browser
- Durable rules (persistent rules engine) learning notes
- 图床软件要收费,算了我自己写一个开源免费的。
- 模型推理模板
- 叶酸&适配体修饰DNA纳米载体|CdS纳米颗粒修饰DNA|科研试剂
- ds1302——斌哥51
- Data visualization ---- web page displays temperature and humidity
猜你喜欢

ds1302——斌哥51

藻酸盐/PEI/DNA复合载体|脂质-鱼精蛋白-DNA复合物|合成方法

回归——岭回归

EasyExce template filling generation of Excel of actual operation, many processing sheet page

单壁碳纳米管-DNA复合物(SWCNT-DNA)|作用机理

一道菜撑起百亿估值的太二酸菜鱼,能否迈过食品安全这道坎?

通过观测云监控器监控基础资源,自动报警

webUI测试框架设计思路详解

Thesis writing strategy | how to write an academic research paper

PEG-siRNA-PCL|siRNA-PEG-LHRH|MPEG-siRNA 甲氧基聚乙二醇修饰核酸
随机推荐
带你刷(牛客网)C语言百题(第四天)
Oracle问题: ORA-01882: 未找到时区
R语言对airbnb数据nlp文本挖掘、地理、词云可视化、回归GAM模型、交叉验证分析
荧光量子点修饰siRNA-QDs|纳米金修饰siRNA-Au(RNA修饰方式方法)
解析掌握现代化少儿编程实操能力
mysql get field comments and get table fields
C# WPF给综合实战项目加个帮助文档
LeetCode_474_一和零
JMeter usage tutorial (2)
ACM study book introduction
万字总结:分布式系统的38个知识点
进程间六种通信方式
C# 窗体与子线程数据交互
关于安装软件时x86 ,x64,x86_64,ARM 64, ARM 32 的选择
藻酸盐/PEI/DNA复合载体|脂质-鱼精蛋白-DNA复合物|合成方法
使用MD5加密后的字符串存密码安全吗?你不得不了解的Hash算法
ESP8266-Arduino programming example-I2C device address scan
Kotlin - Coroutine Scope CoroutineScope, Coroutine Builder CoroutineBuilder, Coroutine Scope Function CoroutineScope Functiom
这半年我做交易链路自动化回归的那些事儿...
Kubernetes: (4) Common commands