題目
難度:中等
編寫一個高效的算法來搜索 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;
}
};