描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。输入一个二维数组和一个数val,判断数组中是否包含这个数
思路:从右上角开始查找:如果右上角的值arr小于val,则表示arr左边的数都小于val,缩小查找范围,行数+1,继续寻找;
如果右上角的值arr大于val,则表示arr所在的列都大于val,所有范围,列数-1,继续寻找;
如果一直找不到,数组越界,返回false
public static boolean find(int[][] arr, int val) {
if (arr == null || arr.length < 1 || arr[0].length < 1) return false;
int i = 0, j = arr[0].length - 1;
while (i < arr.length && j >= 0) {
if (arr[i][j] > val) {
j--;
} else if (arr[i][j] < val) {
i++;
} else {
return true;
}
}
return false;
}
也可以从左下角开始查找,小于val, 列+1;大于val, 行-1;
注意,如果从左上或右下开始查询,不能判断该向哪个方向缩小范围。