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

1 篇文章 0 订阅
1 篇文章 0 订阅

转载请声明源地址


听说,剑指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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值