题目简述: 有一个矩阵, 无论是按行还是按列都是单调递增的, 查找一个数是否存在于矩阵中.
C++:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
// 判断数组不为空
if(matrix.size() == 0 || matrix[0].size() == 0) return false;
int row = 0;
int column = matrix[0].size() - 1;
while(row < matrix.size() && column >= 0) {
// 获取当前元素
int num = matrix[row][column];
// 遍历数组
if(num == target) {
return true;
} else if (num > target) {
--column;
} else {
++row;
}
}
return false;
}
};
解析:
-
思路: 从左上角开始查找, 如果左上角值大于目标, 则查找其左边的一列(因为往下走, 值都会更大); 如果左上角的值小于目标, 则查找其下一行(因为往右走, 值都会更小).
-
看清楚题目, C++用的vector, C用的数组, 求rows和columns是不同的.