public class Solution {
public boolean Find(int target, int [][] array) {
if (array == null || array.length == 0 || array[0].length == 0) {
return false;
}
int n = array.length;
int m = array[0].length;
int curN = 0;
int curM = m - 1;
/*
数组的行递增和列递增使得数组查找时不知道向右走还是向下走,因为向这两个方向都是递增。
有没有一种办法,使得数组像一个方向走是递增,一个方向走是递减,这样就可此确定每次走的方向
如何使列递增,行递减,将所有的行反序一下。
我们没必要真的反序,只需要从[0][m - 1]的位置开始遍历即可。
大于target向左走,小于target向下走
*/
while (true) {
int cur = array[curN][curM];
if (cur < target) {
curN++;
} else if (cur > target){
curM--;
} else {
return true;
}
if (curM < 0 || curM >= m || curN < 0 || curN >= n) {
return false;
}
}
}
}