题目
难度:中等
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
题解
题解1:对符合条件的行进行二分查找
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int xlen = matrix.size();
if(!xlen || !matrix[0].size()) return false;
int ylen = matrix[0].size();
for(int i = 0; i < xlen; i++){
if(matrix[i][0] <= target && matrix[i][ylen - 1] >= target){
int l = 0;
int r = ylen;
while(l < r){
int mid = (l + r) / 2;
if(matrix[i][mid] == target) return true;
else if(matrix[i][mid] > target) r = mid;
else l = mid + 1;
}
}
}
return false;
}
};
题解2:从矩阵的右上角开始出发查找
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(!matrix.size() || !matrix[0].size()) return false;
int i = 0;
int j = matrix[0].size() - 1;
while(i < matrix.size() && j >= 0){
if(matrix[i][j] == target) return true;
else if(matrix[i][j] < target) i++;
else j--;
}
return false;
}
};