有点类似于二叉树了,从左上角开始,通过不断判断,将边界缩小(类似于这一题顺时针打印列表 https://blog.csdn.net/HUIEX/article/details/121564439)
/** 从右上角开始,往下变大,往右边小*/
/** 设置边界 up,down,left,right ,当up < down,right < left,结束查找,即没有找到*/
/** 如果目标数小于当前数,就向右移动,如果目标数大于当前数,就像下移动*/
public static boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix.length == 0) return false;
/** 边界*/
int left = 0,down = matrix.length - 1;
int up = 0,right = matrix[0].length - 1;
/** 开始查找*/
while (up <= down && left <= right){
if (target < matrix[up][right]) right--;//向右移动
else if (target > matrix[up][right]) up++;//向下移动
else return true;
}
return false;
}