已解答
中等
相关标签
相关企业
给你一个满足下述两条属性的
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
cpp
class Solution {
public:
int row, col, len;
bool bSearch(vector<vector<int>>& matrix, int target, int start, int end){
if(end - start <= 1){
return matrix[start / col][start % col] == target;
}
int mid = (start + end) / 2;
if(matrix[mid /col][mid % col] > target){
return bSearch(matrix, target, start, mid);
}
else{
return bSearch(matrix, target, mid, end);
}
}
bool searchMatrix(vector<vector<int>>& matrix, int target) {
row = matrix.size();
col = matrix[0].size();
len = row * col;
return bSearch(matrix, target, 0, len);
}
};

