34. Search for a Range

Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm's runtime complexity must be in the order ofO(logn).

If the target is not found in the array, return[-1, -1].

For example,
Given[5, 7, 7, 8, 8, 10]and target value 8,
return[3, 4].

思路:递归二分搜索也是需要掌握的

    public int[] searchRange(int[] nums, int target) {
        int[] range = {nums.length, -1};
        searchRange(nums, target, 0, nums.length - 1, range);
        if (range[0] > range[1]) range[0] = -1; 
        return range;
    }

    public void searchRange(int[] nums, int target, int lo, int hi, int[] range){
        if (lo>hi) return;
        int mid = (lo+hi)/2;
        if (nums[mid]==target){
            if (mid<range[0]){
                range[0] = mid;
                searchRange(nums,target,lo,mid-1,range);
            }
            if (mid>range[1]){
                range[1] = mid;
                searchRange(nums,target,mid+1,hi,range);
            }

        }else if(nums[mid]<target){
            searchRange(nums,target,mid+1,hi,range);
        }else if(nums[mid]>target){
            searchRange(nums,target,lo,mid-1,range);
        }
    }
}

results matching ""

    No results matching ""