LeetCode #33 Search in Rotated Sorted Array
题目
Search in Rotated Sorted Array
解题方法
典型的查找型题目,暴力破解的时间复杂度是O(n),由于元素有顺序,可以在它的基础上稍微再简化一下:
以数组中第一个数为基准,若target大于nums[0],则从第一位开始找,直到找到target,或者当前位置的数小于nums[0],或下标越界;若target小于nums[0],则从最后一位开始找,判定条件同理可推。
这种简化方法多次测试后会优于直接暴力破解,但时间复杂度仍然是O(n)。
代码
class Solution:
def search(self, nums: List[int], target: int) -> int:
ret = -1
if not len(nums):
return ret
if nums[0] < target:
i = 1
while i < len(nums) and nums[i] <= target and nums[i] >= nums[0]:
if nums[i] == target:
ret = i
break
i += 1
elif nums[0] > target:
i = len(nums) - 1
while i > -1 and nums[i] >= target and nums[i] <= nums[len(nums)-1]:
if nums[i] == target:
ret = i
break
i -= 1
else:
ret = 0
return ret

浙公网安备 33010602011771号