34. 在排序数组中查找元素的第一个和最后一个位置

题目描述

 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

 如果数组中不存在目标值 target,返回 [-1, -1]

原题请参考链接https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

题解

方法一 【双指针(暴力破解)】

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        l = len(nums)
        if l==0:
            return [-1,-1]
        if not target in nums:
            return [-1,-1]
        start = 0
        end = 0
        for start in range(l):
            if nums[start] != target:
                end += 1
            else:
                while end<l-1 and nums[end+1] == target:
                    end += 1
                break
        return [start,end]

方法二 【二分查找】

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        n = len(nums); L = 0; R = n
        if n== 0:
            return [-1,-1]
        if not target in nums:
            return [-1,-1]
        while L <= R:
            mid = int(L + (R-L)/2)
            if nums[mid] == target:
                start = mid - 1; end = mid + 1
                while start >= 0 and nums[start] == target: start-=1
                while end < n and nums[end] == target: end+=1
                return [start+1, end-1]
            elif nums[mid] < target: L = mid + 1
            else: R = mid-1
        return [-1, -1]
posted @ 2021-02-17 00:50  Bladers  阅读(18)  评论(0)    收藏  举报