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

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

  • 标签:数组、二分查找
  • 难度:中等

题目大意 #

给定一个升序数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。要求使用时间复杂度为 $O(log n)$ 的算法解决问题。

解题思路 #

要求使用时间复杂度为 $O(logn)$ 的算法解决问题,那么就需要使用「二分查找算法」了。这道题明显就是对「二分查找」的考察。

进行两次二分查找,第一次尽量向左搜索。第二次尽量向右搜索。

代码 #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        ans = [-1, -1]
        n = len(nums)
        if n == 0:
            return ans

        left = 0
        right = n - 1
        while left < right:
            mid = left + (right - left) // 2
            if nums[mid] < target:
                left = mid + 1
            else:
                right = mid

        if nums[left] != target:
            return ans

        ans[0] = left

        left = 0
        right = n - 1
        while left < right:
            mid = left + (right - left + 1) // 2
            if nums[mid] > target:
                right = mid - 1
            else:
                left = mid

        if nums[left] == target:
            ans[1] = left

        return ans
本站总访问量  次  |  您是本站第  位访问者