剑指offer第一题(Java):二维数组中查找

二维数组中的查找

题目描述

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

解题思路

在一个二维数组中,如果我们一个一个进行遍历的话会十分麻烦,所以我们采取另一种方式。由于数组是按照递增顺序排列的,所以我们可以从右上角开始进行查找,如若右上角的数字小于目标数字,那么就向下遍历,如果右上角的数字小于目标数字,那么就使列数减一,继续进行比较,直到找出数字或者不满足循环条件二退出。具体思路如下图所示。
图片: 在这里插入图片描述

具体代码的实现

public static boolean Find(int target, int [][] array) {
        boolean flag =false;
	    //判断传来的数据是否合法
	      if(array==null) {
		        flag=false;
	        }
	    //规定从右上角开始,若大于则列数则减少,若小于则行数增加,rows为二维数组的行数,columns为二维数组的列数
             int rows=array.length;
             int columns=array[0].length;
	         int ro=0;
	         int co=columns-1;
	            while(ro<rows&&co>=0) {
		            if(array[ro][co]==target) {
			            flag=true;
			            break;
		            }else if(array[ro][co]>target){
			            co--;
		            }else  if(array[ro][co]<target) {
			            ro++;
		            }
	           }
	            return flag;
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值