二维数组中的查找(java版)

1.问题描述

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

2.算法分析

二维数组特点:每一行都是递增有序,每一列都是递增有序。

根据二维数组的特点,查找一个待定元素target,首先与array[i][j]比较。结果分以下三种情况:

(1)target == array[i][j],返回true

(2)target  >  array[i][j]。此时,target在array[i][j]的右下部分区域

(3)target  <  array[i][j]。此时,target在array[i][j]的左上部分区域

        综上,由于行和列的方法都可变,查找的区域较大。那么,有没有一种方式可以减少待查元素变化的范围,将其按照行和列变化转化为只按照行变化或者只按照列变化。因此,可以采用降维的方式来处理该问题。


3.算法设计

首先,定义可用变量:

int[][] array  :  array数组,表示待查找集合

int colLength :列的长度

int rowLength:行的长度

int  row : 表示行下标,取值范围(0-array.length-1)。初值为array.length-1

int  col   :   表示列下标,取值范围(0-array[0].length-1)。初值为0

比较过程:target与array[row][col]比较。结果分为以下三种情况:

(1)target == array[row][col],返回true

(2)target  >  array[row][col]。此时,target在array[row][col+1]到array[row][colLength-1]之间

(3)target  <  array[row][col]。此时,查找上一行元素

此时,降维了。选取的待比较元素从行最大列最小开始,那么当target大于array[i][j]时,可以沿着列的方向继续比较。

4.代码实现

public boolean find(int[][] array, int target){
		int rowLength = array.length;
		int colLength = array[0].length;
		int row = rowLength -1;
		int i=0;
		while(row>=0 && i< colLength){
			if(array[row][i] > target){
				row--;
			}else if(array[row][i]<target){
				i++;
			}else {
				return true;
			}
		}
		return false;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值