Skip to content

Commit cf57e14

Browse files
committed
[7th batch] week 4 - search in rotated sorted array
1 parent e55157c commit cf57e14

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# 7기 풀이
2+
# 시간 복잡도: O(log n)
3+
# - binary search를 이용했기 때문에 최악의 경우는 log n
4+
# 공간 복잡도: O(1)
5+
# - 몇 가지 변수만 사용됨
6+
class Solution:
7+
def findMin(self, nums: List[int]) -> int:
8+
# 양 끝을 먼저 잡아준다
9+
left, right = 0, len(nums) - 1
10+
11+
# left보다 right가 클 때 계속 루프를 돈다
12+
# 이는 left와 right가 같아질 때까지 돈다는 말과 동일하다
13+
while left < right:
14+
# 중간 index 계산
15+
mid = (left + right) // 2
16+
17+
if nums[mid] > nums[right]:
18+
# 중간 index의 값이 오른쪽 index의 값보다 크다는 것은
19+
# 최소 값이 mid 기준 오른쪽 구역에 존재하기 때문에 left을 mid쪽으로 움직인다.
20+
# mid의 값 자체는 최소값이 될 수 없기 때문에 left는 이보다 한 칸 옆으로 움직여야 함
21+
left = mid + 1
22+
else:
23+
# 중간 index의 값이 오른쪽 index의 값보다 작다는 것은
24+
# 최소 값이 mid 기준 왼쪽 구역에 존재하기 때문에 right를 mid쪽으로 움직인다.
25+
# mid의 값 자체는 최소값이 될 수 있기 때문에 right는 mid 값을 할당한다.
26+
right = mid
27+
28+
# left와 right가 같아질 때(최소값을 찾았을 때) 루프 탈출을 하기 때문에
29+
# nums[left] 또는 nums[right]를 반환
30+
return nums[left]

0 commit comments

Comments
 (0)