首页 > 学院 > 开发设计 > 正文

剑指offer--<二维数组查找>

2019-11-06 06:40:15
字体:
来源:转载
供稿:网友

转载请声明源地址

听说,剑指offer那都是大牛干的活【偷笑】,我也凑个热闹,

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数

有三个想法:

1.1 for循环遍历

1.2 for循环遍历优化版

2. 腾讯曾经的笔试题目(那个100层扔鸡蛋,扔玻璃球,扔......)【下篇博客再写】。

看到题目的时候,以前做过一维数组查找,一个for循环查找,二维数组要查找的话,一样,直接使用两个for循环,时间复杂度是o(n^2),说干就干。

存在的问题:

数组是自增数组,如何查找才时间复杂度才是最低的 ,这是优化的方向,想法2也是基于这个目的。

1.1 for循环遍历 

中心指导思想:遇到相同的文件就退出所有循环,将外循环加上标签,退出循环时,直接退出标签循环。

   public static boolean Find1(int target, int [][] array) {        int lenOfarray=array.length;        int lenOfRow=array[0].length;        Boolean flag=true;        outside:		for (int i=0;i<lenOfarray;i++)		{			for (int j=0;j<lenOfRow;j++)			{				if (array[i][j]==target)				{					flag=false;					break outside;				}			}		}		return !flag;    }附:牛客截图

1.2 for循环遍历

中心指导思想:遇到相同的文件就退出所有循环,将判断元素相同的条件加入到 循环判定条件中  ,这样一旦flag变化,判断条件也同样变化。

    public static boolean Find2(int target, int [][] array) {        int lenOfarray=array.length;        int lenOfRow=array[0].length;        Boolean flag=true;		for (int i=0;flag && i<lenOfarray;i++)		{			for (int j=0;flag && j<lenOfRow;j++)			{								if (array[i][j]==target)				{					flag=false;				}			}		}		return !flag;    }附:牛客截图

源代码:GitHub:  https://github.com/johnlee2018/JZoffer.git


上一篇:测试和调试可观察序列

下一篇:UVa442

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表