File tree Expand file tree Collapse file tree
find-minimum-in-rotated-sorted-array Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ int findMin (vector<int >& nums) {
4+ return solve (nums, 0 , nums.size () - 1 );
5+ }
6+
7+ int solve (vector<int >& num, int start, int end)
8+ {
9+ if (end - start < 2 )
10+ {
11+ return min (num[start], num[end]);
12+ }
13+
14+ // 중간 인덱스 계산
15+ int mid = (start + end) / 2 ;
16+
17+ // 오름차순 정렬이 깨지기 시작한 부분 -> 최솟값 발견
18+ if (num[mid] < num[mid - 1 ])
19+ {
20+ return num[mid];
21+ }
22+
23+ // 왼쪽 영역이 정렬되어 있는 경우
24+ if (num[start] <= num[mid])
25+ {
26+ // 그리고 오른쪽 영역까지도 정렬된 경우
27+ if (num[mid] <= num[end])
28+ {
29+ // 가장 왼쪽에 있는 값이 최솟값
30+ return num[start];
31+ }
32+
33+ // 왼쪽 영역만 정렬된 경우
34+ // 오른쪽 영역에서 정렬이 깨지는 부분 찾으러 가기
35+ return solve (num, mid + 1 , end);
36+ }
37+
38+ // 오른쪽 영역이 정렬된 경우
39+ // 왼쪽 영역에서 정렬이 깨지는 부분 찾으러 가기
40+ return solve (num, start, mid - 1 );
41+ }
42+ };
You can’t perform that action at this time.
0 commit comments