題目
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
1以矩形來查找
1.1描述
將二維數組畫成矩形,然后從數組中選取一個數字,分3中情況來分析查找的過程,時間復雜度o(n*m),空間復雜度o(1)
1.2code
1 public class ArrayFind { 2 private static int[][] A; 3 4 private static int[][] initArray() { 5 int[][] A = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, 6 { 6, 8, 11, 15 } }; 7 return A; 8 } 9 10 private static void find(int target) { 11 boolean found=false; 12 if (A != null) { 13 int row =0; 14 int column = A[0].length-1; 15 int key; 16 while (row < A.length && column >= 0) { 17 key = A[row][column]; 18 System.out.println("now key="+key); 19 if (key == target) { 20 found=true; 21 break; 22 } else if (key < target) { 23 ++row; 24 } else { 25 --column; 26 } 27 } 28 if(found){ 29 System.out.println("find the targe "+target+" in :" + row + "," 30 + column + "!"); 31 } 32 else{ 33 System.out.println("Sorry not found!"); 34 } 35 } 36 37 } 38 39 public static void main(String[] args) { 40 // TODO Auto-generated method stub 41 A=initArray(); 42 find(14); 43 44 45 } 46 47 } 48 49 ———————————————— 50 版權聲明:本文為CSDN博主「暮光_」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。 51 原文鏈接:https://blog.csdn.net/u012091092/article/details/45849445
2尋找普遍規律
2.1描述
從最后一列開始往回查找,每一列的第一行是該列的最小值,若目標值小於該列第一行,則其小於這一列的所有數字;找到大於等於目標值的該列數並記錄col;
從第一行的第col列開始每行查找,每行的第col列是當前行的最大值,找到目標值小於等於第col列的數,記錄下行數row;
在row~array.length行和0~col列之間的進行查找對應值即可;時間復雜度是o(n+m),空間復雜度是o(1)
2.2code
1 public boolean Find(int target, int [][] array) { 2 //0.判空 3 if(array==null||array.length==0||array[0].length==0){ 4 return false; 5 } 6 //1.先按照列進行判斷,將target與第一行每一列的元素進行比較 7 //第一行每一列的元素是每一列最小的 8 int col=0; 9 for(int i=array[0].length-1;i>=0;i--){ 10 if(target>=array[1][i]){ 11 col=i; 12 break; 13 } 14 } 15 //2.按照行進行判斷,將target與第col列每一行進行比較 16 //第col列每一行是該行最大的 17 int row=0; 18 for(int i=0;i<array.length;i++){ 19 if(target>=array[col][i]){ 20 row=i; 21 break; 22 } 23 } 24 //3.target就處於0~col和row到array.length之間 25 for(int i=row;i<array.length;i++){ 26 for (int j=0;j<=col;j++){ 27 if(array[i][j]==target){ 28 return true; 29 } 30 } 31 } 32 return false; 33 }