搜索二维矩阵
编写一个高效的算法来判断 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