【Leetcode

xiaoxiao2025-11-08  5

Q:

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

你的算法时间复杂度必须是 O(log n) 级别。

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

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4]

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1]

思路: 首先所给数组是有序的,而且是个查找问题,因此使用二分查找的方法,代码如下:

class Solution(object): def searchRange(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ length = len(nums) if length == 0: return [-1, -1] if nums[0] <= target and nums[-1] >= target: left, right = 0, length - 1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: right = left = mid while left - 1 >= 0 and nums[left - 1] == target: left -= 1 while right + 1 <= length - 1 and nums[right + 1] == target: right += 1 return [left, right] elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return [-1, -1]

 

 

转载请注明原文地址: https://www.6miu.com/read-5039289.html

最新回复(0)