1. 程式人生 > >【Java】 劍指offer(53-3) 陣列中數值和下標相等的元素 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集

【Java】 劍指offer(53-3) 陣列中數值和下標相等的元素 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集

 

本文參考自《劍指offer》一書,程式碼採用Java語言。

更多:《劍指Offer》Java實現合集  

題目

  假設一個單調遞增的數組裡的每個元素都是整數並且是唯一的。請程式設計實現一個函式找出陣列中任意一個數值等於其下標的元素。例如,在陣列{-3, -1,1, 3, 5}中,數字3和它的下標相等。

思路

  同53-153-2一樣,不再從頭到尾遍歷,由於是排序陣列,我們繼續考慮使用二分查詢演算法:

    1)當中間數字等於其下標時,中間數字即為所求數字;

    2)當中間數字大於其下標時,在左半部分割槽域尋找;

    2)當中間數字小於其下標時,在右半部分割槽域尋找;

 

測試算例 

  1.功能測試(包含/不包含與下標相等的數字)

  2.邊界值測試(數字位於陣列開頭、中間或者結尾;僅一個數字陣列)

  2.特殊測試(null)

Java程式碼

//題目:假設一個單調遞增的數組裡的每個元素都是整數並且是唯一的。請程式設計實
//現一個函式找出陣列中任意一個數值等於其下標的元素。例如,在陣列{-3, -1,
//1, 3, 5}中,數字3和它的下標相等。

public class IntegerIdenticalToIndex {
	public int getNumberSameAsIndex(int[] arr) {
		if(arr==null || arr.length<=0)
			return -1;  //代表錯誤
		int low=0;
		int high=arr.length-1;
		while(low<=high) {
			int mid= (high+low)>>1;
			if(arr[mid]>mid)
				high=mid-1;
			else if(arr[mid]<mid)
				low=mid+1;
			else 
				return mid;
		}
		return -1;
	}
}

  

收穫

  1.對於在排序陣列中查詢某些特定的數字,可以對二分法稍加改造,實現所需的功能。

  

更多:《劍指Offer》Java實現合集