leetcode 在有序矩阵中查找某个数,第k小数 (二分法)
2016-12-13 08:37
501 查看
240. Search a 2D Matrix II
题目地址
https://leetcode.com/problems/search-a-2d-matrix-ii/查找特定的某个数,主要是根据矩阵有序,采用二分法缩小矩阵的搜索范围
378. Kth Smallest Element in a Sorted Matrix
题目地址
https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/查找第k小数,主要是对数采用二分法。对某个数,在矩阵中查找小于等于该数的个数,最后把数定下来,然后判断
ac代码
class Solution { public: // 小于等于num的数的个数 int cntlow(vector<vector<int>>& matrix, int m, int n, int num) { int cnt = 0; int x = n-1; int y = 0; while(x >= 0 && y <= m-1) { while( x >= 0 && matrix[y][x] > num) x--; if(x < 0) break; cnt += x - 0 + 1; // 每一行小于等于num的数的个数 y ++; // 下一行 } return cnt; } int kthSmallest(vector<vector<int>>& matrix, int k) { int m = matrix.size(); if(m == 0) return 0; int n = matrix[0].size(); if(n == 0) return false; int minVal = matrix[0][0]; int maxVal = matrix[m-1][n-1]; /* 定位到某个数 minVal 或者maxVal minVal <= maxVal 最后退出的时候,minVal 和 maxVak 一定是matrix中的数 */ while(minVal < maxVal - 1) { int mid = (maxVal - minVal) / 2 + minVal; int cnt = cntlow(matrix,m,n,mid); if(cnt < k){ minVal = mid; }else{ maxVal = mid; } } if(cntlow(matrix,m,n,minVal) >= k) return minVal; return maxVal; } };
ac参考
菁小妖的博客
http://blog.sina.com.cn/s/blog_a6bd98c90102x19a.html
相关文章推荐
- leetcode 378. Kth Smallest Element in a Sorted Matrix有序矩阵寻找第K小数+二分查找
- [LeetCode]—Search a 2D Matrix 有序二维矩阵中查找目标值
- 有序矩阵中查找第k小的元素 Kth smallest element in a row-wise and column-wise sorted 2D array
- leetcode_378. Kth Smallest Element in a Sorted Matrix 有序矩阵中的第k小的数
- Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)
- [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
- Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)
- 【双数组二分法+控制划分点】两有序数组取第k小数
- 定义数组为有序数组模型,并利用二分法进行查找,删除特定值(缺点:只能删除一个值,若有相同的值,则删除第一个)
- 在两个有序链表中查找第K大元素。
- 行列有序矩阵求第k大元素
- [Google] 矩阵行列都有序,求矩阵中第K大的数
- 矩阵topK 给一个矩阵,各行各列均有序,求第k小值。(k大的值)
- 迭代用在有序数组二分法查找中,递归的二分法查找更简洁,但速度可能会慢一点
- 有序数组二分法查找数值
- 有序数组的二分法查找关键字
- Sorting_Searching 有序矩阵中查找数 @CareerCup
- 2576: The K-th minimum number 高级二分 矩阵c[i][j]=a[i]*b[j] 求c数组中第k小数
- Search a 2D Matrix 在有序二维矩阵查找数 @LeetCode
- 题目1174:查找第K小数