剑指offer----二维数组中的查找的解析与实现

题目:

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

解析:

 (1)该数组是有序的  从左到右 从上到下 都是递增的 这是问题的关键

 (2)从左下角或者右上角查找

  从左下角查找:target比当前元素大,右移。

                target比当前元素小,上移。

  从右上角查找:target比当前元素大,下移。

从左下角开始查找的实现

 public boolean Find(int [][] array,int target) 
	 {
		 //左下角的元素所在的位置是最后一行第0列
		 int i = array.length-1;//二维数组的行数
		 int j = 0;//第0列
		 while(i >= 0 && j < array[0].length)//当行数索引大于等于零 列数索引小于总列数
		 {
			 if(array[i][j] > target)//如果
			 {
				 i--; //如果target小于a[i][j],则列不变,行上移
			 }
			 else if(array[i][j] < target)//如果target小于a[i][j],则行不变,列右移
			 {
				 j++;
			 }
			 else
				 return true;
		 }
		 return false;
	 }

从右上角开始查找的实现

 public boolean Find(int [][] array,int target) 
	 {
		 int i = 0;
		 int j = array[0].length-1;
		 while(i < array.length && j >= 0)
		 {
			 if(target < array[i][j] )
			 {
				 j--; //如果target小于a[i][j],行不变 列左移
			 }
			 else if(target > array[i][j])//如果target大于a[i][j],列 不变 行下移
			 {
				 i++;
			 }
			 else
				 return true;
		 }
		 return false;
	 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值