링크
정렬된 배열이 k 번째 인덱스에서 회전되었을 때, 특정 원소의 위치를 O(log(n)) 만에 구하는 문제
def search(self, nums: List[int], target: int) -> int:
n = len(nums)
l = k = 0; r = n - 1
while k < n - 1 and nums[k] <= nums[k + 1]:
k += 1
if k == n - 1:
l = 0; r = n -1
elif target > nums[-1]:
r = k
else:
l = k + 1
while l <= r:
mid = (l + r) // 2
if nums[mid] == target:
return mid
if nums[mid] < target:
l = mid + 1
else:
r = mid -1
return -1
def search(self, nums: List[int], target: int) -> int:
n = len(nums)
l = k = 0; r = n - 1
while l <= r:
mid = (l + r) // 2
if nums[mid] == target:
return mid
if nums[mid] < nums[l]:
if nums[mid] < target <= nums[r]:
l = mid + 1
else:
r = mid - 1
else:
if nums[l] <= target < nums[mid]:
r = mid - 1
else:
l = mid + 1
return -1