1、剑指offer之二维数组的查找,题目解析和java实现方法
程序员文章站
2022-05-20 10:56:08
...
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
要求
时间限制:1秒 空间限制:32768K
题目解析
输入参数是一个二位数组和一个整数,其中二维数组每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
因此可以从数组的左下角开始查找,每查找一个元素判断目标数字是否与当前数组的元素相等。(从右上角开始查找亦可)。
(1)若相等返回true结果。
(2)若目标数字大于当前数组元素的值,则向右移动一列查找。
(3)若目标数字小于当前数组元素的值,则向上移动一行查找。
可能有人会问,问什么不能从左上角或者右下角开始查找,这是因为需要确定
唯一移动的方向。假如我们一开始是从左上角开始查找,具体输入参数如下图所示,目标数字9大于左上角1,而数组向右和向下都是递增的,所以该向右移动一列还是向下移动一行来查找呢,这时就出现了混淆。从右下角开始查找同理。
输入参数的情况参考下图:
具体的实现算法如下(java):
public boolean Find(int target, int [][] array) {
boolean result = false;
int row = 0;//行数
int col = 0;//列数
int i,j;//i,j分别记录当前行和列
row = array.length;
col = array[0].length;
//从左上角开始遍历
for(i=row-1,j=0;i>=0&&j<col;){
//判断目标值是否等于于当前元素值
if(target == array[i][j]){
result = true;
return true;
}
//判断目标值是否大于当前元素值
if(target > array[i][j]){
j++;
continue;
}
//判断目标值是否小于于当前元素值
if(target < array[i][j]){
i--;
continue;
}
}
return false;
}
上一篇: 日映岚光青锁翠———二维数组
下一篇: 面试题:二维数组中的查找