1. 程式人生 > >39.數組中數值和下標相等的元素

39.數組中數值和下標相等的元素

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.數組中數值和下標相等的元素