378 有序矩陣中第K小的元素

2021-10-07 16:55:09 字數 962 閱讀 5170

題目描述:

給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第 k 小的元素。

請注意,它是排序後的第 k 小元素,而不是第 k 個不同的元素。

示例:

matrix = [

[ 1, 5, 9],

[10, 11, 13],

[12, 13, 15]

],k = 8,

返回 13。

你可以假設 k 的值永遠是有效的,1 ≤ k ≤ n2 。

方法1:參考官方解答

主要思路:

(1)陣列的每一行是公升序,每一列是公升序,則陣列整體是從左上方到右下方公升序,既小值集中在左上部分,大值集中在右下部分;

(2)由這個有序性,考慮使用二分查詢,這裡使用陣列中的最小值left=matrix[0][0],陣列中的最大值right=matrix[n-1][n-1],來構建中間值mid=left+((right-left)>>1),來分割整個陣列,將整個陣列分為左上和右下兩部分,然後判斷左上部分的元素的個數和 k 的關係,調整left 或right,使left和right逐漸的夾逼到中間的第k個值;

(3)考慮到陣列的有序性,從左下角開始對陣列進行分割,並統計其左上部分的元素數量,注意這裡將等於mid 的值劃分到左上部分了;

class

solution

else

}return num>=k;

//判斷第k個值是否在左上部分

}int

kthsmallest

(vectorint>>

& matrix,

int k)

else

}return left;

//返回夾逼到的值//這裡使用return right;是一樣的結果}}

;

378 有序矩陣中第K小的元素

378.有序矩陣中第k小的元素 給定乙個n x n矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第k小的元素。請注意,它是排序後的第k小元素,而不是第k個不同的元素。示例 matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。你可以假設 k 的值永遠是有效的,1 k ...

378 有序矩陣中第K小的元素

題目 給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第 k 小的元素 思路及演算法 由題目給出的性質可知,這個矩陣的每一行均為乙個有序陣列。問題即轉化為從這 n 個有序陣列中找第 k 大的數,可以想到利用歸併排序的做法,歸併到第 k 個數即可停止。一般歸併排序是兩個陣列歸併...

378 有序矩陣中第K小的元素

給定乙個n x n矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第k小的元素。請注意,它是排序後的第k小元素,而不是第k個不同的元素。示例 matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。思路 在matrix 0 0 matrix length 1 length...