因此我们可以从整个矩阵的右上角开始枚举,假设当前枚举的数是 xx:
如果 xx 等于target,则说明我们找到了目标值,返回true;
如果 xx 小于target,则 xx 左边的数一定都小于target,我们可以直接排除当前一整行的数;
如果 xx 大于target,则 xx 下边的数一定都大于target,我们可以直接排序当前一整列的数;
排除一整行就是让枚举的点的横坐标加一,排除一整列就是让纵坐标减一。
当我们排除完整个矩阵后仍没有找到目标值时,就说明目标值不存在,返回false。
int[][] arr = {{1, 2, 8, 9},
{2, 4, 9, 12},
{4, 7, 10, 13},
{6, 8, 11, 15}};
class Solution {
public boolean searchArray(int[][] array, int target) {
if(array.length==0||array[0].length==0) return false;
int i = 0;
int j = array[0].length-1;
while(i < array.length && j >= 0){
if(array[i][j] == target){
return true;
}else if(array[i][j] > target){
j--;
}else{
i++;
}
}
return false;
}
}