File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ 풀이
3+ - 이진탐색을 두 번 사용하여 풀이할 수 있습니다
4+ 첫번째, pivot index를 찾습니다
5+ 두번째, target을 찾습니다
6+
7+ Big O
8+ - N: 주어진 배열 nums의 길이
9+ - Time complexity: O(logN)
10+ - 각 이진탐색이 모두 O(logN)의 시간 복잡도를 가집니다
11+ - Space complexity: O(1)
12+ */
13+
14+ func search (nums []int , target int ) int {
15+ n := len (nums )
16+
17+ lo , hi := 0 , n
18+ for lo < hi {
19+ mid := lo + (hi - lo )/ 2
20+ if nums [mid ] > nums [n - 1 ] {
21+ lo = mid + 1
22+ } else {
23+ hi = mid
24+ }
25+ }
26+ pivot := lo
27+ if pivot == n {
28+ pivot = 0
29+ }
30+
31+ lo , hi = pivot , pivot + n
32+ for lo < hi {
33+ mid := lo + (hi - lo )/ 2
34+ normalizedMid := mid
35+ if normalizedMid >= n {
36+ normalizedMid = mid - n
37+ }
38+ if nums [normalizedMid ] <= target {
39+ lo = mid + 1
40+ } else {
41+ hi = mid
42+ }
43+ }
44+
45+ if lo > n {
46+ lo -= n
47+ }
48+ if lo - 1 < 0 || nums [lo - 1 ] != target {
49+ return - 1
50+ }
51+ return lo - 1
52+ }
You can’t perform that action at this time.
0 commit comments