搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
两次二分搜索
1 class Solution{
2 public:
3 bool searchMatrix(vector<vector<int>> &matrix, int target){
4 if (matrix.empty() || matrix[0].empty()) return false;
5 if (target<matrix[0][0] || target>matrix.back().back()) return false;
6 int left = 0, right = matrix.size() - 1;
7 while (left <= right){
8 int mid = (left + right) / 2;
9 if (matrix[mid][0] == target) return true;
10 else if (matrix[mid][0]<target) left = mid + 1;
11 else right = mid - 1;
12 }
13 int tmp = right;
14 left = 0;
15 right = matrix[tmp].size() - 1;
16 while (left <= right){
17 int mid = (left + right) / 2;
18 if (matrix[tmp][mid] == target) return true;
19 else if (matrix[tmp][mid]<target) left = mid + 1;
20 else right = mid - 1;
21 }
22 return false;
23 }
24 };
来源:https://www.cnblogs.com/kexinxin/p/10163048.html