题目分析:
这一题和【LeetCode】33. Search in Rotated Sorted Array极为相似,而且题目要求我们的时间复杂度也是O(log n),根据时间复杂度的提醒我们可以想到二分法。
代码说明:
代码先使用经典二分法找到一个符合的元素,然后再建立指针左右寻找符合的边界,代码中已有注释,请参考注释。
测试代码:
class Solution:
def searchRange(self, nums, target):
#二分法的左右指针
left, right = 0, len(nums) - 1
#为空返回[-1,-1]
if nums == []: return [-1,-1]
while(left <= right):
#中间指针不用int()会产生小数
mid = int((left + right) / 2)
#加入找到了
if nums[mid] == target:
#i,j从找到的位置向两边寻找
i = mid - 1
j = mid + 1
while i >= 0 and nums[i] == target:
i -= 1
while j <= len(nums) - 1 and nums[j] == target:
j += 1
return [i + 1, j - 1]
#二分法思路,移动左右指针
if nums[left] <= target and nums[mid] > target: right = mid - 1
else: left = mid + 1
#没找到返回[-1,-1]
return [-1,-1]
print(Solution().searchRange([1], 1)) #提交时请删除该行