3、二维数组查值

老子叫甜甜 提交于 2020-01-06 13:53:39

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

思考、观察、分析、总结:

通过看书学习,得知此题有两种解法,源于思路的不同。

重点在于:解决复杂问题的有效方法是从一个具体问题入手,多方面尝试并寻找其规律。

思路:从二维数组的右上角往左下角进行判断

1、右上角的值 = 要查找的值则返回true

2、右上角的值 > 要查找的值就把所在的列剔除掉,因为右上角的数是这列最小的。

3、右上角的值 < 要查找的值就把所在的行剔除,因为右上角的数是这行最大的。

测试用例:

public class FindNumber {
/*
 * 二维数组查找值
 * 思路:从二维数组的右上角往左下角进行判断
	
	1、右上角的值 = 要查找的值则返回true
	
	2、右上角的值 > 要查找的值就把所在的列剔除掉,因为右上角的数是这列最小的。
	
	3、右上角的值 < 要查找的值就把所在的行剔除,因为右上角的数是这行最大的。
 * 
 * 分析:
 * 1、创建Method类,创建成员方法find实现判断二维数组是否包含要找的值
 * 		
 * 2、创建Method对象,创建二维数组,调用find方法,并将其返回值存储在Boolean中并打印
 */
	public static void main(String[] args) {
		/*
		 * 2、创建Method对象,创建二维数组,调用find方法,并将其返回值存储在Boolean中并打印
		 */
		Method m = new Method();
		int [][] arr = {{1,2,3},{4,5,6},{7,8,9}};
		boolean b = m.find(arr, 10);
		System.out.println("是否有查找的值:" + b);
	}

}
/*
1、创建Method类,创建成员方法find实现判断二维数组是否包含要找的值
返回值类型:boolean
参数列表:int [] [] array
*/
class Method {
	public boolean find(int [][] array,int target) {
		if(array == null || array.length == 0) {	//判断数组是否为空和长度为0,满足其一则放回false
			return false;
		}
		
		int row = 0;						        //从第一行开始
		int column = array[0].length - 1;	        //从第一行最后一列开始
		
		while(row < array.length && column >= 0 ) {	//行小于总行长度,且列小于等于0时无线循环
			if(array [row][column] == target) {		//右上角的值 = 查找值?
				return true;						//相等则返回true
			}
				if(array[row][column] > target) {	//右上角的值 > 查找值?
					column--;						//剔除所在列,往上一列查找
				}else {								//右上角的值 < 查找值
					row++;							//剔除所在行,往下一行查找
				}	
		}
		
		return false;
	}
}

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!