39.數組中數值和下標相等的元素
阿新 • • 發佈:2019-05-11
mea asi 遞增 相同 code sta 它的 坐標 一個數
題目描述:
??假設一個單調遞增的數組裏的每個元素都是整數且是唯一的,請編程實現一個函數,找出數組中任意一個數值等於其下標的元素,例如,在數組{-3,-1,1,3,5}中數字3和它的下標相同。
思路分析:
??由於是排序的且遞增的數組的查找問題,那麽我們考慮使用二叉查找法。假設我們某一步抵達了某個數字,且這個數字等於其在數組中的下標,那麽我們就找到了答案。如果這個數字不等於其下標,那麽我們判斷,如果這個數字大於其下標,根據遞增數組的性質,這個數字後面的數都大於其相應的下標,所以下一階段我們在左段進行查找。如果這個數字小於其坐標,那麽根據遞增數組的性質,這個數字前面的數都小於其對應的下標,所以下一階段在後半段進行查找。
代碼:
public class Test{ public int GetNumberSameAsIndex(int[]nums){ if(nums.length==0||nums==null) return -1; int res=find(nums,0,nums.length-1); return res; } public int find(int []nums,int start,int end){ int mid=(start+end)/2; int midnum=nums[mid]; if(start<=end){ if(midnum==mid){ return mid; }else if(midnum>mid){ end=mid-1; }else{ start=mid+1; } } return find(nums,start,end); } }
39.數組中數值和下標相等的元素