剑指offer面试题java实现之题3:二维数组中的查找

/**
 * @function 在一个二维数组中,每一行都按照从左向右递增顺序排序;
 * 			每一列都按照从上到下递增顺序排序。
 * 			1, 2, 8, 9 
 * 			2, 4, 9, 12 
 * 			4, 7 ,10, 15 
 * 			6, 8 ,11, 17
 * @author PC
 * @descripte  假如找7,我们首先从右上角9 开始找,由于9大于7,并且9还是第四列最小的一个,则
 * 				可以将第四列去掉,不考虑。剩下的三列中,选取右上角8,开始分析,同样可以去掉
 * 				第三列,此时只需要考虑前两列。依然选取右上角2,此时2小于7,且2是第一行最大的数;
 * 				去掉第一行,依次这样分析...
 */
public class FindFormTowDimension {
	
	public static void findItem(int [][] matrix ,int xt){
		int m = matrix.length;
		int n = matrix[0].length;
		int i=0,j=n;
		int ru = matrix[i][j-1];//rightUp位置的数字
		while(i<m&&j>0){
			if(ru>xt){
				j = j-1;
				if(j==0){
					break;
				}
			}else if(ru<xt){
				i = i + 1;
				if(i==m)
					break;
			}else{
				break;
			}
			ru = matrix[i][j-1];
		}
		if(i==m||j==0){
			System.out.println("未找到"+xt+"这个元素");
		}else{
			System.out.println("find the"+xt+"在第"+(i+1)+"行,"+j+"列");
		}
	}
	
	public static void main(String[] args) {
		int [][]matrix = {{1, 2, 8, 9 ,10},{2, 4, 9, 12 , 14},
				{4, 7 ,10, 15 , 16},{ 6, 8 ,11, 17,19}};
		findItem(matrix,12);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值