java 基礎資料遍歷(2)----二維陣列查詢
阿新 • • 發佈:2019-01-01
題目要求:
一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
輸入描述:
array: 待查詢的二維陣列
target:查詢的數字
輸出描述:
查詢到返回true,查詢不到返回false。
解題思路:
1.確認使用for迴圈。
2.為避免重複輸出結果,當找到和target值相等的array[][]時,立即跳出迴圈,並在迴圈外判斷是否存在。
3.輸出結果。
實際操作:
public static void main(String[] args) {
int [][] array={{1,2,3},
{2,3,4},
{3,4,5}};
boolean find=false ;
Scanner scanner =new Scanner(System .in);
System.out.println("請輸入數字:");
int target=scanner .nextInt();//確認target的值
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j]==target) {
find=true;//返回true.
i=array.length-1;
j=array[i].length-1;//當target數值等於array[i][j]時,立即跳出迴圈。
}
}
}if (find) {
System.out .println("存在數字:"+target);//在迴圈外判斷target值是否存在,並輸出結果。
}else {
System.out.println("不存在數字:"+target);
}
}
}
實際結果
思路擴充套件:
若修改本題的二維陣列為:每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。且每個數字都不會重複出現。其他要求不改變。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
解題思路:
1.使用for迴圈
2.按陣列的規律,為減少迴圈次數,決定從陣列的左下角開始尋找與target的值相等的array[i][j]。
3.具體操作:先將target值與array[i][0]比較(i=array.length-1)。當target大於或等於array[i][0]時,開始向右比較target和陣列的值。反之,若target小於或等於array[i][0]時,進入迴圈(i–),直至發現target大於或等於array[i][0]。
4.輸出結果。
public static void main(String[] args) {
int[][] array={{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20}};
boolean find=false;
int target =5;
int loopNum =0;
for (int i = array.length-1; i>-1; i--) {
if (target>=array[i][0]) {
for (int j = 0; j < array[i].length; j++) {
if (target==array[i][j]) {
find=true;
i=0;//跳出外迴圈
j=array[i].length-1;//跳出內迴圈
//找到數字後,立即跳出迴圈。
}
loopNum++;
}
i=0;//跳出外迴圈
}else {
loopNum++;
}
}if (find) {
System.out.println(target+" "+loopNum);
}else {
System.out.println("sorry"+loopNum);
}
}
}
實際結果: