34. Find First and Last Position

2019-04-07  本文已影响0人  Chiduru

【Description】
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]

【Idea】

O(log n) 时间复杂度,就要考虑分治

先找到匹配的一个下标,然后向左向右遍历找她的重复值

【Solution】

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        if nums == [] or nums[0] > target or nums[-1] < target:
            return [-1, -1]
        l = 0
        r = len(nums) -1
        while l <= r:
            index = (l+r)//2
            if nums[index] == target:
                i, j = index, index
                while i - 1 >= 0 and nums[i - 1] == target:
                    i -= 1
                while j + 1 < len(nums) and nums[j + 1] == target:
                    j += 1
                return [i, j]
            elif nums[index] > target:
                r = index -1
            else:
                l = index + 1
        if nums[index] != target:
            return [-1, -1]
上一篇下一篇

猜你喜欢

热点阅读