二维数组中的查找

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


public class FindInArray {
	public static void main(String[] args) {
		int[][] arr = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
		int[][] arr1 = null;
		System.out.println(find(arr,9));
//		System.out.println(isExist(arr,19));
	}
	/**
	 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序
	 * 每一列都按照从上到下递增的顺序排序。判断该二维数组中,是否有特定的数.
	 * 
	 * 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,
	 * 剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行
	 * 
	 * 当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍的规律。
	 * @param arr
	 * @param num
	 * @return
	 */
	public static boolean isExist(int[][] arr, int num){
		if(arr==null || arr.length==0) return false;
		boolean exist = false;
		int i=0;
		int row = arr.length;
		int column = arr[i].length-1;
		while(i<row && column>=0){
			if(arr[i][column]==num){
				exist = true;
				break;
			}else if(arr[i][column]>num)
				column--;
			else
				i++;
		}
		return exist;
	}
	
	
	/**
	 * 递归写法
	 * @param arr
	 * @param num
	 * @return
	 */
	public static boolean find(int[][] arr, int num){
		if(arr==null || arr.length==0)return false;
		return find(arr,num,0,arr[0].length-1);
	}
	private static boolean find(int[][] arr, int num, int row, int column){
		if(column<0 || row>=arr.length) return false;
		if(arr[row][column]==num)return true;
		else if(arr[row][column]>num)return find(arr,num,row,column-1);
		else return find(arr,num,row+1,column);
	}
	
}

当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍的规律。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值