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