本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
假設一個單調遞增的數組裏的每一個元素都是整數而且是惟一的。請編程實現一個函數找出數組中任意一個數值等於其下標的元素。例如,在數組{-3, -1,1, 3, 5}中,數字3和它的下標相等。算法
同53-1和53-2同樣,再也不從頭至尾遍歷,因爲是排序數組,咱們繼續考慮使用二分查找算法:編程
1)當中間數字等於其下標時,中間數字即爲所求數字;數組
2)當中間數字大於其下標時,在左半部分區域尋找;函數
2)當中間數字小於其下標時,在右半部分區域尋找;post
測試算例 測試
1.功能測試(包含/不包含與下標相等的數字)url
2.邊界值測試(數字位於數組開頭、中間或者結尾;僅一個數字數組)htm
2.特殊測試(null)
//題目:假設一個單調遞增的數組裏的每一個元素都是整數而且是惟一的。請編程實 //現一個函數找出數組中任意一個數值等於其下標的元素。例如,在數組{-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.對於在排序數組中查找某些特定的數字,能夠對二分法稍加改造,實現所需的功能。