题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:
矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时。右移要查找数字比左下角数字小时,上移。
实现代码:
public class Collection {
public boolean Find(int target, int [][] array) {
int c = 0;//第0列
int r = array.length-1;//最后一行
while((r>=0)&&(c<array[0].length)){//边界条件
if(array[r][c]<target){//如果target大于array,则右移
r++;
}else if(array[r][c]>target){//如果target小于array,则上移
c--;
}else{
return true;//满足等于就为true
}
}
return false;//全都不满足,则为false。
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入数组行数和列数\n");
int x = s.nextInt();
int y = s.nextInt();
int[][] array = new int[x][y];// 初始化数组
System.out.println("请输入数组元素\n");
for (int i = 0; i < x; i++)// 循环输入
for (int j = 0; j < y; j++)
array[i][j] = s.nextInt();
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数\n");
int t = sc.nextInt();
Find(t, array);
if (Find(t, array) == false) {
System.out.println("数组中不含该元素");
} else
System.out.println("数组中含有该元素");
}
}
输出示例: