由于每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
所以,我们从右上角往左下角寻找target,如果当前位置比target要大,就不用在这一列找了,因为这一列往下的数都大于当前位置的数,直接 j - -,从前一列中找;如果当前位置比target要小,就不用在这一行找了,因为这一行之前的数都小于当前位置的数,直接 i + +,从下一行找。
class Solution {
public:
bool searchArray(vector<vector<int>> array, int target) {
if (array.empty() || array[0].empty()) return false;
// 从右上角到左下角依次判断
int i = 0, j = array[0].size() - 1;
while (i < array.size() && j >= 0)
{
if (array[i][j] == target) return true;
// 如果当前位置比target要大,就不用在这一列找了
if (target < array[i][j]) j --;
// 如果当前位置比target要小,就不用在这一行找了
else i ++;
}
return false;
}
};