leetcode 33. 搜索旋转排序数组

解题思路

“二分查找”
注意考虑 3 种情况:
1、nums[l] < nums[mid]
2、nums[l] > nums[mid]
3、nums[l] == nums[mid]

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution:
def search(self, nums: List[int], target: int) -> int:
l = 0
r = len(nums) - 1
while l <= r:
mid = (l+r) >> 1
if target == nums[mid]:
return mid
if nums[l] <= nums[mid]:
if nums[l] <= target < nums[mid]:
r = mid - 1
else:
l = mid + 1
else:
if nums[mid] < target <= nums[r]:
l = mid + 1
else:
r = mid - 1
return -1