失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 62. Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 (二分查找-局部有序)

62. Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 (二分查找-局部有序)

时间:2023-12-27 16:54:13

相关推荐

62. Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 (二分查找-局部有序)

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。进阶:你可以设计并实现时间复杂度为O(log n)的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入:nums = [], target = 0输出:[-1,-1]class Solution:def searchRange(self, nums: List[int], target: int) -> List[int]:if not nums:return [-1, -1]n = len(nums)# 查找第一个元素和最后一个元素def find(is_find_first):begin = 0end = n - 1while begin <= end:mid = begin + (end - begin) // 2if nums[mid] > target:end = mid - 1elif nums[mid] < target:begin = mid + 1# 找到目标值,开始定位第一个和最后一个位置else:if is_find_first:# 如果不满足条件,缩小左边界,继续往左边查找if mid > 0 and nums[mid] == nums[mid-1]:end = mid - 1else:return midelse:# 如果不满足条件,增大左边界,继续往右查找if mid < n - 1 and nums[mid] == nums[mid+1]:begin = mid + 1else:return midreturn -1return [find(True), find(False)]

如果觉得《62. Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 (二分查找-局部有序)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。