Day12 AcWing 15. 二维数组中的查找
Day12 LeetCode 74. 搜索二维矩阵
思路
- 二分查找
- 一次二分查找:若将矩阵每一行拼接在上一行的末尾,则会得到一个升序数组,我们可以在该数组上二分找到目标元素。代码实现时,可以二分升序数组的下标,将其映射到原矩阵的行和列上。
- 单调性扫描
74. 搜索二维矩阵
1 2
| 输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 输出:true
|
代码
搜索二维矩阵 & 二维数组中的查找
单调性扫描
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); int n=matrix[0].size(); int i=m-1,j=0; while(i>=0&&j<n) { if(matrix[i][j]>target) i--; else if(matrix[i][j]<target) j++; else return true; } return false; } };
|
二分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m = matrix.size(), n = matrix[0].size(); int low = 0, high = m * n - 1; while (low <= high) { int mid = (high - low) / 2 + low; int x = matrix[mid / n][mid % n]; if (x < target) { low = mid + 1; } else if (x > target) { high = mid - 1; } else { return true; } } return false; } };
|