题解 | #二维数组中的查找#
二维数组中的查找
http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
题目要求O(n + m),即最坏的情况是行一次列一次,所以我们每次行动都需要排除 一行 或者 一列 。如果从 左上角 或 右下角 开始查找的话,会出现两个方向(都是 比它小 的,或者都是 比它大 的),无法排除。因此我们需要从 右上角 或者 左下角 开始查找,这样每一次操作都可以排除 一行 或 一列 。例如,从 右上角 开始查找的话,比 target 大,就找右边的;比 target 小,就找下面的。最终若超出边界的话,就是没有与 target 值相同的元素。
public boolean Find(int target, int[][] array) {
int row = array.length;
if (row == 0) {
return false;
}
int col = array[0].length;
if (col == 0) {
return false;
}
int i = 0;
int j = col - 1;
while (i < row && j >= 0) {
if (array[i][j] < target) {
i++;
}
else if (array[i][j] > target) {
j--;
}
else {
return true;
}
}
return false;
}
}