1. 程式人生 > >劍指offer習題---二維陣列中的查詢

劍指offer習題---二維陣列中的查詢

題目:在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序,請完成一個函式,輸入這樣的二維陣列和一個整數,判斷該陣列中是否存在該整數。

  其實質就是一種雜湊的思想,對於每一列來說,我只需要將待查詢的數和每一列第一行(或者每一行第一列)比較,看看其屬於某一列(行)然後再在裡面進行比較,確定具體位置,當然書上的寫法比較有技巧性,將兩個步驟合在一起.

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));
  }
}