【推荐】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;
}
}
来源:oschina
链接:https://my.oschina.net/u/4432600/blog/3153584