在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*基于题目整体思路(题目相关扩展思路):
1.构造满足条件的二维数组
2.遍历检查构造的数组是否正确
3.去二维数组中查找是否存在该整数。
*本题目的准确解法
public static void main(String [] args){
int value = 560;
int times = 0;
int n = 10;
int arry[][] = new int[n][n];
//随机生成满足条件的二维数组
for(int i = 0;i<arry.length;i++){
for(int j=0;j<arry[i].length;j++){
if(j==0) {
if(i == 0) {
arry[i][j] = (int) (Math.random() * 100) + 1;
}else{
int rowgap = (int)(Math.random()*100)+1;
arry[i][j] = arry[i-1][j]+rowgap;
}
}else{
if(i ==0){
int columgap = (int)(Math.random()*100)+1;
arry[i][j] = arry[i][j-1]+columgap;
}else{
int rowcolgap = (int)(Math.random()*100)+1;
if(arry[i-1][j]<arry[i][j-1]){
arry[i][j] = arry[i][j-1]+rowcolgap;
}else{
arry[i][j] = arry[i-1][j]+rowcolgap;
}
}
}
}
}
//遍历输出数组 检验数组是否构造正确
for( int i = 0 ;i<arry.length;i++){
for(int j = 0;j<arry[i].length;j++){
if(j<n-1){
System.out.print(arry[i][j]+" ");
}else{
System.out.println(arry[i][j]);
}
}
}
//遍历查找二维数组中是否存在该值
int row = arry.length -1 ;
int colum = 0;
int flag = 0;
for (int k = row;k>=0; k --){
for(int b = colum ;b<arry.length; b ++){
if(value == (arry[row][colum])){
times =times +1;
flag = 1;
break;
}else if(value>(arry[row][colum])){
times = times + 1;
colum =colum + 1;
}else{
times = times + 1;
row = row -1;
break;
}
}
if(flag==1) {
System.out.print("查找了" + times+"次"+"Exist the value of " + value );
break;
}else if(k==0){
System.out.print("查找了" + times+"次"+"Not exist the value of "+value);
}
}
}
效果图:
//*本题目的准确解法:(自行体会)