LeetCode 378. 有序矩阵中第K小的元素(二分查找)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 378. 有序矩阵中第K小的元素(二分查找)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 暴力法
- 2.2 二分查找
1. 題目
給定一個 n x n 矩陣,其中每行和每列元素均按升序排序,找到矩陣中第k小的元素。
請注意,它是排序后的第k小元素,而不是第k個元素。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
2.1 暴力法
- 將所有元素插入小頂堆
- 然后出隊k-1個,最后的堆頂就是答案,時間復雜度 O(n2)
2.2 二分查找
- 找出矩陣中最小數left,最大數right,第k小的數在left~right之間
- mid=(left+right) / 2;在矩陣中尋找小于等于mid的元素個數count
- 若count<k,第k小的數在右半部分且不包含mid,即left=mid+1, right=right
- 若count>=k,第k小的數在左半部分且可能包含mid,即left=left, right=mid
- 當left==right時,第k小的數即被找出
上面的輔助求count函數,還可寫成
int findNotBigerThanMid(vector<vector<int>> &m, int &mid, int &r, int &c) {int i = 0, j = c-1, count = 0;while(i < r && j >= 0){if(m[i][j] <= mid){count += j+1;i++;}elsej--;}return count; }參考 Leetcode 240 搜索二維矩陣 II
總結
以上是生活随笔為你收集整理的LeetCode 378. 有序矩阵中第K小的元素(二分查找)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 777. 在LR字符串
- 下一篇: LeetCode 101. 对称二叉树(