判斷數組中是否含有該整數
阿新 • • 發佈:2018-11-15
st3 數組 println 普通 fin find mil true --
題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序, 每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,
判斷數組中是否含有該整數。
思路:
①對於一般數組,普通遍歷方式即可判斷數組中是否含有該元素。對於二維數組,兩層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
總結:
知道對於這種特殊排列的數組選擇哪種遍歷方式最有效(左下角開始尋找)
判斷數組中是否含有該整數