当前位置:网站首页>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;
}
}
边栏推荐
- JSP Servlet JDBC MySQL CRUD Sample Tutorial
- [mathematical foundation] higher mathematics concept learning
- [GXYCTF2019] ban dolls
- JUC Concurrent Programming Basics AQS
- 4D Summary: 38 Knowledge Points of Distributed Systems
- 嵌入式分享合集24
- Omni-channel e-commerce | How can well-known domestic cosmeceuticals seize the opportunity to achieve rapid growth?
- 解析掌握现代化少儿编程实操能力
- offsetwidth111[通俗易懂]
- C language learning books (improvement)
猜你喜欢

JMeter使用教程(二)

Baidu internship students late night fun: originally giant is this kind of life

siRNA-S-S-PEG-LMWP|M-MSN-siRNA介孔二氧化硅修饰RNA(齐岳RNA功能化修饰)

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

GalNAc-siRNA甘露糖/半乳糖修饰脱氧核糖核酸|siRNA-S-S-DSPE(RNA修饰技术介绍)

conda virtual environment | install and list problems

从专业角度分析国内创客教育发展

Expert advice | How to formulate a growth strategy for survival in an economic downturn

LOG4J Learning

一线技术人应该关注的四种思维能力
随机推荐
图床软件要收费,算了我自己写一个开源免费的。
The second growth curve | The driving guide for corporate innovation to break through the stagnation dilemma
include用法及搭配(include相关短语)
C language learning books zero-based introductory articles
Where is Naive Bayes "naive"?
Samba服务器配置(什么情况下需要服务器)
尿素偶联Urea-siRNA Conjugates|Cyclodextrin-siRNA-β-CD环糊精修饰RNA核酸(解析说明)
Private domain growth | Private domain members: 15 case collections from 9 major chain industries
Durable rules(持久规则引擎) 学习小记
手写dialog弹框
Baidu internship students late night fun: originally giant is this kind of life
JMeter tutorial (a)
怎么实现您的个人知识库?
带你刷(牛客网)C语言百题(第四天)
如何进入董事会:给CIO的十条建议
Oracle问题: ORA-01882: 未找到时区
sad rock
海量数据查询方案mysql_Mysql海量数据存储和解决方案之二—-Mysql分表查询海量数据…[通俗易懂]
SwiftUI * @State 相关问题
LeetCode 0144. 二叉树的前序遍历:二叉树必会题