【Java】 劍指offer(53-3) 數組中數值和下標相等的元素

 

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

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

題目

  假設一個單調遞增的數組裏的每一個元素都是整數而且是惟一的。請編程實現一個函數找出數組中任意一個數值等於其下標的元素。例如,在數組{-3, -1,1, 3, 5}中,數字3和它的下標相等。算法

思路

  同53-153-2同樣,再也不從頭至尾遍歷,因爲是排序數組,咱們繼續考慮使用二分查找算法:編程

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

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

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

 

測試算例 測試

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

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

  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實現合集 

相關文章
相關標籤/搜索