判斷陣列中是否含有該整數
阿新 • • 發佈:2018-11-15
題目描述
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序, 每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,
判斷陣列中是否含有該整數。
思路:
①對於一般陣列,普通遍歷方式即可判斷陣列中是否含有該元素。對於二維陣列,兩層for迴圈即可,時間複雜讀為o(n*n);
②對於本題,二維陣列行按升序排列,列也按升序排列,我們可以使用一點小技巧:從陣列的左下角開始遍歷陣列,能更有效率的解決問題。
具體程式碼:
1 public class test3 { 2 public staticvoid main(String[] args) { 3 int[][] arr = {{11,22,33,44},{12,23,34,45},{13,24,35,46},{14,25,36,47}}; 4 System.out.println(Find(12,arr)); 5 6 } 7 public static boolean Find(int target, int [][] array) { 8 int hang=array.length;//獲取行數 9 int lie=array[0].length;//獲取 10 int i=hang-1; 11 int j=0; //從左下角開始 12 while(target!=array[i][j]) { 13 if(target<array[i][j]) {//比目標元素大,則行號減1 14 i--; 15 } 16 else if(target>array[i][j]) {//比目標元素小,則列號加1 17 j++; 18 }19 if(i<0||j>lie-1) {//當行或列超出陣列範圍則返回false,表示沒找到,不然就在迴圈體裡一直找 20 return false; 21 } 22 } 23 return true; 24 25 26 } 27 } 28
總結:
知道對於這種特殊排列的陣列選擇哪種遍歷方式最有效(左下角開始尋找)