39.数组中数值和下标相等的元素

题目描述:

  假设一个单调递增的数组里的每个元素都是整数且是唯一的,请编程实现一个函数,找出数组中任意一个数值等于其下标的元素,例如,在数组{-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);
    }
    
}

猜你喜欢

转载自www.cnblogs.com/yjxyy/p/10846886.html
今日推荐