Classical Binary Search(经典二分查找问题 )

问题

Find any position of a target number in a sorted array. Return -1 if target does not exist.
Example
Given [1, 2, 2, 4, 5, 5].
For target = 2, return 1 or 2.
For target = 5, return 4 or 5.
For target = 6, return -1.

分析

二分查找,前提一定是有序的数组。
每次选中间的作为参照:
1.如果相等,直接返回。
2.如果比目标大,那么目标一定在左边。
3.如果比目标小,那么目标一定在右边。
递归。
需要注意的是使用mid=l+(r-l)/2和使用mid=(l+r)/2性能稍有差别。

代码

    /**
     * @param nums: An integer array sorted in ascending order
     * @param target: An integer
     * @return an integer
     */
    public int findPosition(int[] nums, int target) {
        // Write your code here
        int l=0;
        int r=nums.length-1;
        return tree(nums,target,l,r);
    }
    private int tree(int[] nums,int key,int l,int r){
        if(l>r){
            return -1;
        }
        int mid=l+(r-l)/2;
        int temp=nums[mid];
        if(temp==key){
            return mid;
        }else if(temp>key){
            return tree(nums,key,l,mid-1);
        }else{
            return tree(nums,key,mid+1,r);
        }
    }
}

你可能感兴趣的:(Classical Binary Search(经典二分查找问题 ))