有序矩阵中第k小元素
有序矩阵中第k小元素
题目:
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。
看到有序就会想到二分查找,而本题的二分查找十分的有趣。
根据这个矩阵的定义,我们知道,最小的元素是最左上角元素,最大的元素是最左下角元素。
由此我们得到 lo(最小值),hi(最大值)。
在此区间内二分查找第k小的元素,而在本题中,对于任意一个数mid来说,小于它的元素一定分布在矩阵的左上角。
而由此和矩阵有序的性质,我们便有一种时间复杂度为O(N)的在矩阵中查找比mid小的元素的数量的算法。
代码:
class Solution {
public int kthSmallest(int[][] matrix, int k) {
int m = matrix.length;
int n = matrix[0].length;
int min = matrix[0][0];
int max = matrix[m-1][n-1];
return search(min,max,matrix,k);
}
public int search(int lo,int hi,int[][]matrix,int k){
while(lo<hi){
int mid = lo+(hi-lo)/2;
if(helper(matrix,mid)<k){
lo = mid+1;
}else{
hi = mid;
}
}
return lo;
}
public int helper(int[][] matrix,int target){
int m = matrix.length;
int n = matrix[0].length;
int r = m-1;
int l = 0;
int ans = 0;
while(r>=0&&l<n){
if(matrix[r][l]<=target){
ans+=r+1;
l++;
}else{
r--;
}
}
return ans;
}
}
有序矩阵中第k小元素的更多相关文章
- [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- Leetcode 378.有序矩阵中第k小的元素
有序矩阵中第k小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1, ...
- [LeetCode] 378. Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- LeetCode 378. 有序矩阵中第K小的元素(Kth Smallest Element in a Sorted Matrix) 13
378. 有序矩阵中第K小的元素 378. Kth Smallest Element in a Sorted Matrix 题目描述 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩 ...
- Java实现 LeetCode 378 有序矩阵中第K小的元素
378. 有序矩阵中第K小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ ...
- 【Leetcode 堆、快速选择、Top-K问题 BFPRT】有序矩阵中第K小的元素(378)
题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1, 5, 9], [ ...
- [Swift]LeetCode378. 有序矩阵中第K小的元素 | Kth Smallest Element in a Sorted Matrix
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- 378 Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素.示例:matrix = [ [ 1, 5, 9], [ ...
- leetcode.矩阵.378有序矩阵中第K小的元素-Java
1. 具体题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1, 5, ...
随机推荐
- PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象documentMode属性
documentMode属性表示当前主窗口是否启用文档模式,如果是则主窗口的选项卡部件会以适合操作文档的模式呈现,这类似于macOS上的文档模式. 设置此属性时,界面上不会呈现选项卡部件框架.此模式当 ...
- RSA简单实践
RSA公钥文件解密密文的原理分析 前言 最近在学习 RSA 加解密过程中遇到一个这样的难题:假设已知 publickey 公钥文件和加密后的密文 flag ,如何对其密文进行解密,转换成明文~~ 分析 ...
- 软件工程团队作业-测试与发布(Alpha版本)
Alpha版本测试报告 功能测试报告 概述 测试阶段:alpha验收测试 测试方法:手动功能测试 测试环境(测试矩阵) Windows操作系统(win10)附带"Windows讲述人&quo ...
- NOI Online 题解
T1 对\(t_i = 1\)的边,将\(u_i, v_i\)连一条边权为\(1\)的边.否则连一条边权为\(0\)的边. 对于每一个连通块,若图中不存在一条边权之和为奇数的圈,则可以将这个连通块二染 ...
- 笨方法学python笔记
编程是什么 编程就是通过输出一种语言给计算机"听",命令其去执行相应的操作. 我们称我们给计算机下达的命令称为指令.一般说程序就是有多个指令构成的. 计算机需要使用非常多的电路来实 ...
- solidity 合约单元测试报错 org.fisco.bcos.web3j.protocol.exceptions.TransactionException: Transaction has failed with status: 0x16. Gas used: 1163650. (not-enough gas?)
org.fisco.bcos.web3j.protocol.exceptions.TransactionException: Transaction has failed with status: 0 ...
- html2canvas使用心得
近两年做了几次微信H5活动的开发,为了达到传播分享的效果,通常最终都需要生成个性化的图片,供用户长按保存分享,在这里就把自己的一些使用心得记录下来,供其他小伙伴借鉴. 这里备注一下,我目前用的是 h ...
- SysCtlDelay 实现延时
SysCtlDelay 实际上由 3 条汇编指令实现,一次可以延时 3 个 clock. 例如,初始化系统时钟: SysCtlClockFreqSet((SYSCTL_XTAL_16MHZ | SYS ...
- 栈的应用:表达式括号匹配检测(C)
问题说明: 假设数学表达式中允许包含两种括号:圆括号"()"和方括号"[]",嵌套顺序任意. 正确的嵌套模式:( [ ] ( ) ).[ ( [ ] [ ] ) ...
- 初学者迭代python
#汉诺塔 def hanni(n,A,B,C): if n == 1: print (A,'-->',C) else: # 将n-1个盘子移动到B上 hanni(n-1,A,C,B) # 将第n ...