概述
从左下开始找。
本质是利用:有序序列中最小的元素比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;
}
}
}
}