剑指offer——二维数组的查找
问题描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路分析
1.先判断二维数组构成的矩阵是否为空,行、列是否大于0。
2.举例说明。
如:二维数组为 查找是否含有5
1 2 7 9
2 4 8 10
3 5 9 12
4 6 11 15
1.从矩阵右上角元素开始判断,5<9,说明要找的数在9的左边列。即:
1 2 7
2 4 8
3 5 9
4 6 11
2.从矩阵右上角元素开始判断,5<7,说明要找的数在7的左边列。即:
1 2
2 4
3 5
4 6
3.从矩阵右上角元素开始判断,5>2,说明要找的数在2的下边行。即:
2 4
3 5
4 6
4.从矩阵右上角元素开始判断,5>4,说明要找的数在4的下边行。即:
3 5
4 6
此时右上角元素=5,说明在。
即和右上角元素比较,小于右上角元素,列=最大列-1。大于右上角元素,行=行+1
代码
public class Solution {
public boolean Find(int target, int [][] array) {
boolean found = false;
if(array == null || array.length ==0 || (array.length == 1 && array[0].length == 0)){
return false;
}
int row = 0;
int column = array[0].length - 1;
while(row < array.length && column >= 0){
if(array[row][column] == target){
found = true;
break;
}
else if(array[row][column] > target){
--column;
}
else ++row;
}
return found;
}
}