剑指offer算法-----数组遍历
程序员文章站
2022-03-05 16:16:36
...
积沙成塔
题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析与实现:
在二位数组中查找一个数,我们可以一次遍历进行与目标数据比较得出,但这种方法的复杂度很大(n平方)。由于每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,所以当我们选择从二位数组的左下角开始查找遍历时,会大大降低算法复杂度(复杂度是n)。
从左下角开始查找的思路是:当目标数大于当前数时行不变,列增加1(此时只能是列加1,如果让行加1的话会在原地上下徘徊出现死循环),当目标数小于当前数时列不变行减一,搜索路径类似台阶,如下查找数字9的查找路线。
算法:
public class ArraySereach {
public boolean Find(int target, int [][] array) {
int len = array.length-1;
int i = 0;
while((len >= 0)&& (i < array[0].length)){
if(array[len][i] > target){
len--;
}else if(array[len][i] < target){
i++;
}else{
return true;
}
}
return false;
}
}
上一篇: Linux经典书籍推荐 Linux编程Unix算法C
下一篇: 插值查找算法
推荐阅读
-
《剑指offer》面试题6 重建二叉树
-
剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。
-
剑指offer31:整数中1出现的次数(从1到n整数中1出现的次数)
-
剑指offer28:找出数组中超过一半的数字。
-
剑指offer27:按字典序打印出该字符串中字符的所有排列
-
C#版剑指Offer-001二维数组中的查找
-
剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)
-
剑指offer13:数组[奇数,偶数],奇数偶数相对位置不变。
-
剑指offer第二天
-
剑指offer JZ31 整数中1出现的次数 Python 解