File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * @link https://leetcode.com/problems/search-in-rotated-sorted-array/description/
3+ *
4+ * 접근 방법 :
5+ * - O(log n)으로 풀어야 하니까 이진 탐색으로 탐색 범위 좁히기
6+ * - pivot 인덱스 찾고, pivot 기준으로 target이 속하는 범위에서 탐색하기
7+ *
8+ * 시간복잡도 : O(log n)
9+ * - 배열 범위를 계속 줄여나가므로 O(log n)
10+ *
11+ * 공간복잡도 : O(1)
12+ * - 고정된 변수만 사용
13+ */
14+
15+ function search ( nums : number [ ] , target : number ) : number {
16+ let start = 0 ,
17+ end = nums . length - 1 ;
18+
19+ // pivot 인덱스 찾기
20+ while ( start < end ) {
21+ const mid = Math . floor ( ( start + end ) / 2 ) ;
22+ if ( nums [ mid ] > nums [ end ] ) {
23+ start = mid + 1 ;
24+ } else {
25+ end = mid ;
26+ }
27+ }
28+
29+ const pivot = start ;
30+ start = 0 ;
31+ end = nums . length - 1 ;
32+
33+ // pivot 기준으로 target이 포함된 범위로 좁히기
34+ if ( nums [ pivot ] <= target && target <= nums [ end ] ) {
35+ start = pivot ;
36+ } else {
37+ end = pivot - 1 ;
38+ }
39+
40+ // target 인덱스 찾기 위해서 이진 탐색 실행
41+ while ( start <= end ) {
42+ const mid = Math . floor ( ( start + end ) / 2 ) ;
43+
44+ if ( nums [ mid ] === target ) return mid ;
45+ if ( nums [ mid ] < target ) {
46+ start = mid + 1 ;
47+ } else {
48+ end = mid - 1 ;
49+ }
50+ }
51+
52+ return - 1 ;
53+ }
You can’t perform that action at this time.
0 commit comments