劍指offer習題---二維陣列中的查詢
阿新 • • 發佈:2019-02-01
題目:在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序,請完成一個函式,輸入這樣的二維陣列和一個整數,判斷該陣列中是否存在該整數。
其實質就是一種雜湊的思想,對於每一列來說,我只需要將待查詢的數和每一列第一行(或者每一行第一列)比較,看看其屬於某一列(行)然後再在裡面進行比較,確定具體位置,當然書上的寫法比較有技巧性,將兩個步驟合在一起.
public class search { public static boolean Find(int[][] matrix,int rows,int columns,int number){//矩陣,行,列,待比較的數 boolean found=false; if (matrix!=null&&rows>0&&columns>0){//合理性檢查 int row=0;//行數為第一行 int column=columns-1;//列數為前一行 while(row<rows&&column>=0){ if (matrix[row][column]==number){ found=true; break; } else if (matrix[row][column]>number){ column--; }else row++; } } return found; } public static void main(String args[]){ int matrix[][]=new int[4][4]; matrix[0][0]=1; matrix[0][1]=2; matrix[0][2]=8; matrix[0][3]=9; matrix[1][0]=2; matrix[1][1]=4; matrix[1][2]=9; matrix[1][3]=12; matrix[2][0]=4; matrix[2][1]=7; matrix[2][2]=10; matrix[2][3]=13; matrix[3][0]=6; matrix[3][1]=8; matrix[3][2]=11; matrix[3][3]=15; System.out.println(Find(matrix,4,4,6)); } }