二維數組中查找數值

一、題目

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

思路:

① 使用雙重循環依次遍歷數組,看有沒有此數值,能夠實現但是效率較低,在線編程題目有運行時間限制,不能通過。

②因爲數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。所以可以從數組的左下角或是右上角開始遍歷,這樣會提高效率。

我是從右上角開始遍歷:因爲從左到右遞增排序從上到下遞增排序,所以右上角的值是當前行中最大的,當前列中最小的,所以,若是給定整數大於右上角的值,則繼續訪問下一行;若是給定整數小於右上角的值,則向左訪問,列數遞減;相等則終止。

二、代碼如下

class Find{
	public static void main(String[] args){
		int [][] a = new int [][]{{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};  
        System.out.println(Find(a,7));  
	}
	public static boolean Find(int [][] array,int target){  
	    int rows=array.length;
		int columns=array[0].length;
		int row=0;
		int column=columns-1;
		boolean isFind=false;
		while(row<rows&&column>=0){
			if(target>array[row][column]){
				row++;
			}else if(target<array[row][column]){
				column--;
			}else{
				isFind=true;
				break;
			}
		}
		return isFind;
	}
}


   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章