킴의 레포지토리
[알고리즘/python] LeetCode 33. Search in Rotated Sorted Array 본문
📑 1. 문제 이해
# 정렬된 배열.
# 중복된 원소 없음.
# 왼쪽으로 rotate된 배열.
💡 2. 알고리즘 설계
def search(self, nums: List[int], target: int) -> int:
if len(nums) == 1:
return 0 if nums[0] == target else -1
k = 0
lo, hi = 0, len(nums) - 1
while lo <= hi:
mid = (lo + hi) // 2
if nums[mid] < nums[mid - 1]:
k = mid
break
if nums[mid] < nums[-1]:
hi = mid - 1
else:
lo = mid + 1
# 주의해야함 왼쪽으로 돌릴때 오른쪽으로 돌릴
k = len(nums) - k
lo, hi = 0, len(nums) - 1
while lo <= hi:
mid = (lo + hi) // 2
rotated_mid = (mid - k) % len(nums)
value = nums[rotated_mid]
if value == target:
return rotated_mid
elif value < target:
lo = mid + 1
else:
hi = mid - 1
return - 1
시간 복잡도 및 공간 복잡도
시간 복잡도: O(LogN)
공간 복잡도: O(1)
'study > algorithm' 카테고리의 다른 글
[알고리즘/python] LeetCode 637. Average of Levels in Binary Tree - BFS, deque 풀이 (0) | 2023.09.08 |
---|---|
[알고리즘/python] LeetCode 148. Sort List (0) | 2023.09.05 |
[알고리즘/python] LeetCode 162. Find Peak Element (0) | 2023.09.05 |
[알고리즘/python] LeetCode 153. Find Minimum in Rotated Sorted Array - 이진 검색 풀이 (0) | 2023.09.02 |
[알고리즘/Python] 242. Valid Anagram (0) | 2023.09.01 |