劍指offer編程題Java實現——面試題3二維數組中的查找


題目描述

在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
 
下面是我實現的代碼,修改下類名(Solution)和方法名(Find)通過了牛客網的測試用例
 1 public class No2Array{
 2     public static void main(String[] args){
 3         int[][] array={{1,2,8,9},
 4                     {2,4,9,12},
 5                     {4,7,10,13},
 6                     {6,8,11,15}};
 7         System.out.println(findByTheUpperRightCorner(5,array));
 8         System.out.println(findByTheLowerLeftCorner(7,array));
 9     }
10     
11     /*
12      * 選取數組查找范圍內的右上角的數字,如果該數字等於要查找的數字,則查找結束。
13      * 如果該數字小於要查找的數字,則剔除該數字所在的行;
14      * 如果該數字大於要查找的數字,則剔除該數字所在的列;
15      */
16     public static boolean findByTheUpperRightCorner(int target, int [][] array) {
17         if(array.length>0){
18             int    rows=array.length;
19             int columns=array[0].length;
20             int row=0;
21             int column=columns-1;
22             while(row<rows&&column>=0){
23                 if(array[row][column]==target)
24                     return true;
25                 if(array[row][column]>target)
26                     column--;
27                 else
28                     row++;
29             }
30             return false;
31         }
32         return false;
33     }
34     
35     /*
36      * 選取數組查找范圍內的左下角的數字,如果該數字等於要查找的數字,則查找結束;
37      * 如果該數字小於要查找的數字,則剔除該數字所在的列;
38      * 如果該數字大於要查找的數字,則剔除該數字所在的行;
39      */
40     public static boolean findByTheLowerLeftCorner(int target,int[][] array){
41         if(array.length>0){
42             int rows=array.length;
43             int columns=array[0].length;
44             int row=rows-1;
45             int column=0;
46             while(row>=0&&column<columns){
47                 if(array[row][column]==target)
48                     return true;
49                 if(array[row][column]<target)
50                     column++;
51                 else
52                     row--;
53             }
54             return false;
55         }
56         return false;
57     }
58 }

通過選取右上角和左上角的兩種實現思路都給出了實現代碼,明白其中一個原理另外一個也就很容易了。關鍵是不能選取左上角或者右下角的數組作為對比,比如選取左上角的數字小於查找的值,那么該數字的下面數字和右面數字都有可能是要查找的范圍,這樣無法縮小查找范圍。所以只要知道從右上角或者左下角進行查找就很容易解決了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM