題目描述:
給定乙個 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...