概述
從左下開始找。
本質是利用:有序序列中最小的元素比target(目標元素)大,那麼target必然不在此序列中。因此也可以從右上找。
題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
原理
從左下開始找。左下的那個元素m有如下性質:
- 這一行中最小的。(如果target比m小,那麼這一行就不必找了,往上一行找)
- 這一列中最大的。(如果target比m大,那麼往右走)
實現
public class Solution {
public boolean Find(int target, int [][] array) {
int row = array.length;
int col = array[0].length;
if (row == 0 || col == 0) return false;
int r = row - 1;
int c = 0;
while (true) {
if (array[r][c] < target) {
c++;
if (c == col) return false;
} else if (array[r][c] > target) {
r--;
if (r < 0) return false;
} else {
return true;
}
}
}
}