二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
核心思想:每次以当前左下角的元素为基准,设为flag
1、flag < target,则flag当前列的元素都小于target,则当前列可消除
2、flag > target,则flag当前行的元素都大于target,则当前行可消除
3、下标出界都没找到,返回false
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
//以左下角元素为标识,设为flag
//1、flag > target,则flag当前行可消去,因为右边元素都比flag大
//2、flag < target,则flag当前列可消去,因为上方元素都比flag小
//当下标出界,则返回false
int n = matrix.length - 1;
int m = 0;
while(n >= 0 && m < matrix[0].length){
int flag = matrix[n][m];
if(flag > target){
n--;
}else if(flag < target){
m++;
}else{
//flag == target
return true;
}
}
return false;
}
}