티스토리 뷰
https://leetcode.com/problems/search-in-rotated-sorted-array/
There is an integer array nums sorted in ascending order (with distinct values).
Prior to being passed to your function, nums is possibly rotated at an unknown pivot index k (1 <= k < nums.length) such that the resulting array is [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] (0-indexed). For example, [0,1,2,4,5,6,7] might be rotated at pivot index 3 and become [4,5,6,7,0,1,2].
Given the array nums after the possible rotation and an integer target, return the index of target if it is in nums, or -1 if it is not in nums.
You must write an algorithm with O(log n) runtime complexity.
Example 1:
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
Example 2:
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
Example 3:
Input: nums = [1], target = 0
Output: -1
def bs_rotated(nums, target):
def bs(lst, start, end):
if start > end:
return -1
mid = (start + end) // 2
if lst[mid] < target:
return bs(lst, mid + 1, end)
elif lst[mid] > target:
return bs(lst, start, mid - 1)
else:
return mid
if not nums:
return -1
left = 0
right = len(nums) - 1
while left < right:
mid = (left + right) // 2
if nums[mid] > nums[right]:
left = mid + 1
else:
right = mid
added = nums + nums[:left]
result = bs(added, left, len(added) - 1)
return result if result == -1 else result % len(nums)
assert bs_rotated(nums=[4,5,6,7,0,1,2], target=0) == 4
'알고리즘' 카테고리의 다른 글
Binary Search - 정렬된 배열에서 특정 수의 개수 구하기 (0) | 2022.02.05 |
---|---|
Binary Search (0) | 2022.02.04 |
dfs - 섬의 개수(number of islands) (0) | 2022.01.21 |
DFS (GRAPH) (0) | 2022.01.21 |
스택, 큐 (0) | 2022.01.18 |