File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ # Intuition
3+
4+ possibly left rotated at an unknown index k → 회전된 배열, 이 조건이 있는 이유?
5+
6+ 시간 복잡도 O(logn)
7+ → 데이터의 크기가 커질수록 처리 시간이 매우 느리게 증가 - 탐색에 자주 사용됨
8+ → 어떤 알고리즘을 사용해야 하는가?
9+
10+ 회전으로 인해 배열 전체가 정렬되어 있지 않지만(두개의 정렬된 배열), O(logn)의 성능을 유지하면서 target을 찾으려면?
11+
12+
13+ # Approach
14+
15+ *회전된 배열 → 중앙값을 기준으로 배열을 나눴을 때, 최소한 한쪽 절반은 정렬되어 있음.
16+ *(예시에서) nums[low](4) < nums[mid](7) 이므로 왼쪽 부분배열은 정렬되어 있음.
17+
18+ N → N/2
19+ 1. 어느 쪽이 정렬되어 있는가?
20+ 2. target이 그 안에 포함되는가?
21+ """
22+
23+ from typing import List
24+
25+
26+ class Solution :
27+ def search (self , nums : List [int ], target : int ) -> int :
28+
29+ low , high = 0 , len (nums ) - 1
30+
31+ while low <= high :
32+ # mid = low + (high - low) // 2
33+ mid = (low + high ) // 2
34+
35+ if nums [mid ] == target :
36+ return mid
37+
38+ # 왼쪽이 정렬된 경우
39+ if nums [low ] <= nums [mid ]:
40+
41+ # target 확인
42+ if nums [low ] <= target and target < nums [mid ]:
43+ high = mid - 1
44+ else :
45+ low = mid + 1
46+
47+ # 오른쪽이 정렬된 경우 (nums[mid] < nums[high])
48+ else :
49+
50+ if nums [mid ] < target and target <= nums [high ]:
51+ low = mid + 1
52+ else :
53+ high = mid - 1
54+
55+ return - 1
You can’t perform that action at this time.
0 commit comments