题目:在一个二维数组中,每一行都是从左往右依次增大,每一列都是从上往下依次增大,请完成一个函数,输入二维数组和整数,判断该数组是包含该整数
分析:
可以从坐下角查起,记需要查找的数字为M,若左下角的数字等于M,则查到。若左下角的数字小于M,则删除所在行,如果左下角的数字大于M,则删除所在列。同理,也可以从右上角查起
public class Demo1 {
public boolean find(int[][] arr,int target){
if(arr==null){
return false;
}
int column = 0;
int row = arr[0].length-1;
//arr.length表示数组的行数
//从做左下角找起
while (column < arr.length && row >= 0 ){
if(arr[row][column] == target){
return true;
}else if(arr[row][column] < target){
column++;
}else{
row--;
}
}
return false;
}
}
测试类:
public class test1 {
public static void main(String[] args) {
int[][] ints = new int[][]{{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
int i = 5;
Demo1 demo1 = new Demo1();
boolean b = demo1.find(ints, i);
System.out.println(b);
}
}
//false
public class test1 {
public static void main(String[] args) {
int[][] ints = new int[][]{{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
int i = 7;
Demo1 demo1 = new Demo1();
boolean b = demo1.find(ints, i);
System.out.println(b);
}
}
//true