剑指Offer | 二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
每行从左到右递增,每列从上到下递增,那么最大值一定在最后一行的最后一个数。
最左下角或右上角的数,只有两种移动方法,且两侧单调性不一样:
对于左下角而言,上面的数都是小于它的,右边的数都是大于它的
对于右上角而言,左边的数都是小于它的,下面的数都是大于它的
例: target为5,二维数组
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
从左下角3开始找,target比3大则右移,比3小则上移
代码
public class Solution {
public boolean Find(int target, int [][] array) {
if(array == null || array.length == 0) return false;
int row = array.length;
int column = array[0].length;
int i = row - 1, j = 0;
while(i >= 0 && j < column) {
if(target == array[i][j]) return true;
else if(target > array[i][j]) j++;
else i--;
}
return false;
}
}