题目:
原题链接: https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
解题思路:
时间复杂度O(logN) + 查找,第一想法就是二分查找
二分查找要求数组是有序的,但是这个不是严格有序的数组,所以需要变动
这个数组中,因为只旋转了一次,所以对于任意的mid值,左半部分和右半部分,必定有一部分是有序的
利用这一点,判断要查找的值是否在此有序部分中
如果存在,则转换为正宗的二分查找
如果不存在,则对另外一部分重复此步骤,直到查找到目标值
代码实现:
class Solution:
def search(self, nums: List[int], target: int) -> bool:
if 0 == len(nums):
return False
elif 1 == len(nums):
return target == nums[0]
elif 2 == len(nums):
return target == nums[0] or target == nums[1]
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return True
if nums[left] == nums[mid]:
left += 1
elif nums[left] < nums[mid]:
if nums[left] <= target < nums[mid]:
right = mid - 1
else:
left = mid + 1
else:
if nums[mid] < target <= nums[right]:
left = mid + 1
else:
right = mid - 1
return False