1. 程式人生 > >判斷陣列中是否含有該整數

判斷陣列中是否含有該整數

題目描述

 在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序, 每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,
判斷陣列中是否含有該整數。

思路:

①對於一般陣列,普通遍歷方式即可判斷陣列中是否含有該元素。對於二維陣列,兩層for迴圈即可,時間複雜讀為o(n*n);

②對於本題,二維陣列行按升序排列,列也按升序排列,我們可以使用一點小技巧:從陣列的左下角開始遍歷陣列,能更有效率的解決問題。

具體程式碼:

 1 public class test3 {
 2     public static
void 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

總結:

知道對於這種特殊排列的陣列選擇哪種遍歷方式最有效(左下角開始尋找)