Skip to content

Commit 79f42eb

Browse files
committed
Solution: Search in Rotated Sorted Array
1 parent 77bebde commit 79f42eb

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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+
}

0 commit comments

Comments
 (0)