34. Search for a Range (两次二分查找)

Given an array of integers nums 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 of O(log n).

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

Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]



 

 

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        if n <=0:
            return [-1,-1]
        lo = 0
        hi = n-1
        while lo <= hi:
            mid = lo + (hi-lo)//2
            if target > nums[mid]:
                lo = mid + 1
            elif target < nums[mid]:
                hi = mid - 1
            else:
                hi = mid - 1
        a1 = lo
                
        lo = 0
        hi = n-1
        while lo <= hi:
            mid = lo + (hi-lo)//2
            if target > nums[mid]:
                lo = mid + 1
            elif target < nums[mid]:
                hi = mid - 1
            else:
                lo = mid + 1
        a2 = lo-1
        if nums[a2] != target:
            return [-1,-1]
        return [a1,a2]

 

 

 

posted @ 2018-05-04 09:17  乐乐章  阅读(282)  评论(0编辑  收藏  举报