Leetcode 378.有序矩阵中第k小的元素

有序矩阵中第k小的元素

给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
请注意,它是排序后的第k小元素,而不是第k个元素。

示例:

matrix = [

[ 1, 5, 9],

[10, 11, 13],

[12, 13, 15]

],

k = 8,

 

返回 13。

说明:
你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n

 

根据二分搜索法,获取中间值,然后搜索他是否为第k个值。

 

 1 class Solution {
 2     public int kthSmallest(int[][] matrix, int k) {
 3         int len = matrix.length;
 4         int low = matrix[0][0],high= matrix[len-1][len-1];
 5         while(low<=high){
 6             int mid = low + (high-low)/2;
 7             int count = helper(matrix,mid);
 8             if(count<k) low = mid+1;
 9             else high = mid-1; //排除mid不在矩阵内的情况,所以只能等到low和high时才退出循环
10         }
11         return low;
12     }
13     private static int helper(int[][] matrix, int mid) {
14         int i = matrix.length-1,j=0;
15         int res = 0;
16         while(i>=0&&j<matrix[0].length){
17             if(matrix[i][j]>mid) i--;
18             else{
19                 res+=i+1;
20                 j++;
21             }
22         }
23         return res;
24     }
25 }

猜你喜欢

转载自www.cnblogs.com/kexinxin/p/10235354.html