特点:
数组行按从小到大的顺序排列,数组列按从小到大的顺序排列。
思路:
以flag标记二维数组右上角的值:
1. 如果目标值大于flag,则目标值比这一行的值都大;
2. 如果目标值小于flag,则目标值比这一列的值小。
public boolean Find(int target, int[][] array) {
if (array == null && array.length == 0) {
return false;
}
int rows = array.length;
int cols = array[0].length;
int row = 0;
int col = cols - 1;
while (row < rows && col >= 0) {
if (array[row][col] == target) {
return true;
} else if (array[row][col] > target) {
col--;
} else {
row++;
}
}
return false;
}
流程如上图所示,也可以从左下角开始判断。