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

2021-09-19 23:35:29 字數 857 閱讀 8161

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

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

示例:

matrix = [

[ 1, 5, 9],

[10, 11, 13],

[12, 13, 15]

],k = 8,

返回 13。

說明:

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

此題用二分法。給定二維矩陣matrix的左上角的數字一定是最小的,而右下角的數字一定是最大的,所以我們設二分法的初始查詢範圍就是在這二者之間。我們算出中間數mid後,呼叫自定義的search_count函式,它返回矩陣中小於等於mid的數有多少個,如果這個結果小於k,那說明我們要找的第k小的數一定比mid大,所以我們將 l 置為mid加1;反之如果這個結果大於等於k,那麼將 r 置為mid。待二分查詢結束後,返回 l 或 r 即可。然後我們來說一下search_count函式如何實現:充分利用二維矩陣的每行和每列元素均按公升序排序的性質,我們從矩陣的左下角元素開始,如果它小於等於目標數,那麼我們將res加上 i + 1,也就是把包括該元素的往上的一列都算進來了,然後將 j++;如果大於目標數,那麼我們將 i--。最終當 i 或 j 不在矩陣範圍內時跳出迴圈,返回res。

class solution 

return l;

}int search_count(vector>& matrix, int& mid)

else

i--;

}return res;

}};

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

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

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

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

LeetCode378 有序矩陣中第k小的元素

題目 給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第k小的元素。請注意,它是排序後的第k小元素,而不是第k個元素。思路 直接求解矩陣中的第8小元素很難,我們可以用二分法設定乙個值mid,檢視mid值是否是矩陣第8小元素。具體思路為 1.首先設定mid的初值為矩陣matri...