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

判斷數組中是否含有該整數

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

總結:

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

判斷數組中是否含有該整數