给你一个满足下述两条属性的 m x n 整数矩阵:
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 输出:true
示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 输出:false
提示:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 100-104 <= matrix[i][j], target <= 104通过次数
341.4K
提交次数
696.7K
通过率
49.0%
二维矩阵的每一行是非严格递增的,而每一格的第一个数大于上一格的最后一个数。如果将二维矩阵按照行展开得到一个一维数组,这个一维数组是非严格递增的。在一个非严格递增的一维数组中找一个值,可以用二分搜索。
- class Solution {
- public:
- bool searchMatrix(vector
int >>& matrix, int target) { - int m=matrix.size();
- int n=matrix[0].size();
- int lo=0,hi=m*n-1;
- while(lo<=hi)
- {
- int mid=(lo+hi)/2;
- if(matrix[mid/n][mid%n]==target)
- {
- return true;
- }
- else if(matrix[mid/n][mid%n]
- {
- lo=mid+1;
- }
- else
- {
- hi=mid-1;
- }
- }
- return false;
- }
- };