zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    [六省联考2017]相逢是问候
    [CQOI2017]老C的键盘
    [CQOI2017]老C的任务
    [CQOI2017]小Q的棋盘
    <sdoi2017>树点涂色
    三分法
    最长回文子串
    hdu3261
    spoj694
    poj1743
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10235354.html
Copyright © 2011-2022 走看看