这道题让我们在一个二维数组中快速的搜索的一个数字,这个二维数组各行各列都是按递增顺序排列的,是之前那道Search a 2D Matrix 搜索一个二维矩阵的延伸,那道题的不同在于每行的第一个数字比上一行的最后一个数字大,是一个整体蛇形递增的数组。所以那道题可以将二维数组展开成一个一位数组用一次二查搜索。而这道题没法那么做,这道题有它自己的特点。如果我们观察题目中给的那个例子,我们可以发现有两个位置的数字很有特点,左下角和右上角的数。可以从左下角开始搜索,如果左下角的数大于target,说明最下面这一行没有target,则往上移动一行,如果左下角的数小于target,说明最左边这一列没有target,则往右移动一行。如果搜索范围出了这个矩阵,说明没有搜到。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty() || matrix[0].empty()) return false;
int m = matrix.size()-1, n = 0;
while(true)
{
if(matrix[m][n] < target) n++;
else if(matrix[m][n] > target) m--;
else return true;
if(m < 0 || n >= matrix[0].size()) break;
}
return false;
}
};