这道题的解法核心就是:从右上角不断搜索。
若 matrix[row][col] == target 则return true;
若 matrix[row][col] > target,则向该数字的左方继续搜索,即col--;
若 matrix[row][col] < target,则向该数字的下方继续搜索,即row++;
这样子做的原因是数组的每行每列都是有序的,这样子可以很容易的缩小查找范围。当然也可以使用二分法继续加快速的。
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.empty() || matrix.size() == 0 || matrix[0].size() == 0){
return false;
}
int n = matrix.size();
int m = matrix[0].size();
int row = 0;
int col = m-1;
while(row < n && col >= 0){
if(matrix[row][col] == target){
return true;
}else if(matrix[row][col] > target){
col--;
}else{
row++;
}
}
return false;
}
};
本文介绍了一种在二维矩阵中搜索特定目标值的高效算法。该矩阵的每一行和每一列都已排序。算法从矩阵的右上角开始,根据目标值与当前值的比较结果,决定向左或向下移动,直至找到目标值或确认不存在。这种方法利用了矩阵的有序特性,有效缩小了搜索范围。
2885

被折叠的 条评论
为什么被折叠?



