Skip to content

Commit 6970565

Browse files
committed
#245 find-minimum-in-rotated-sorted-array
1 parent b9f5150 commit 6970565

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
풀이 :
3+
O(logN)의 시간복잡도를 달성하기 위해 이진탐색
4+
5+
case 1: nums[mid] < nums[right]
6+
mid부터 right까지는 정렬된 상태
7+
따라서 min은 인덱스 left부터 mid에 존재할 가능성이 있으므로 right = mid로 업데이트
8+
9+
case 2: else
10+
mid와 right 사이에 min이 오도록 rotate 되어있는 상태
11+
left부터 mid까지는 min이 존재할 수 없으므로 left = mid + 1로 업데이트
12+
13+
이 두 조건문에 따라 최소값이 포함된 쪽만 남기면 결국 left == right이 되고 이 인덱스의 수를 return
14+
15+
nums의 길이: N
16+
17+
TC : O(logN)
18+
반으로 나눠서 탐색하는 이진탐색이므로 log2(N)의 시간복잡도를 가진다
19+
20+
SC : O(1)
21+
*/
22+
23+
class Solution {
24+
public:
25+
int findMin(vector<int>& nums) {
26+
int left = 0;
27+
int right = nums.size() - 1;
28+
while (left < right)
29+
{
30+
int mid = (left + right) / 2;
31+
if (nums[left] < nums[right])
32+
return nums[left];
33+
else
34+
{
35+
if (nums[mid] < nums[right])
36+
right = mid;
37+
else
38+
left = mid + 1;
39+
}
40+
}
41+
return nums[left];
42+
}
43+
};

0 commit comments

Comments
 (0)