二分-34. Find First and Last Position of Element in Sorted Array

    xiaoxiao2025-02-14  34

    34. Find First and Last Position of Element in Sorted Array 题目描述

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

    你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-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]

    思想 二分。方法多样化:getFirst用的非递归,getLast用的递归。

    class Solution(object): def searchRange(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ return [self.getFirst(nums, target), self.getLast(nums, target, 0, len(nums)-1)] def getFirst(self, nums, target): l, r = 0, len(nums) - 1 while l <= r: mid = (l + r) >> 1 if nums[mid] < target: l = mid + 1 elif nums[mid] > target: r = mid - 1 else: if mid == 0 or nums[mid-1] < target: return mid r = mid - 1 return -1 def getLast(self, nums, target, l, r): if l > r: return -1 mid = (l + r) >> 1 if nums[mid] < target: return self.getLast(nums, target, mid+1, r) if nums[mid] > target: return self.getLast(nums, target, l, mid-1) if mid == len(nums)-1 or nums[mid+1] > target: return mid return self.getLast(nums, target, mid+1, r)
    最新回复(0)