lc-go/solutions/0/q33/solution.go
2026-01-17 12:51:40 +09:00

46 lines
663 B
Go

package q33
func findK(nums []int) int {
if len(nums) < 2 || nums[0] < nums[len(nums)-1] {
return 0
}
l, r := 0, len(nums)
for l < r && nums[l] > nums[r-1] {
m := (l + r) / 2
if nums[m] > nums[r-1] {
l = m + 1
} else {
r = m + 1
l++
}
}
return len(nums) - l
}
func translate(n, k, i int) int {
if i < k {
return n + i - k
}
return i - k
}
func search(nums []int, target int) int {
k := findK(nums)
l, r := 0, len(nums)
for l < r {
m := (l + r) / 2
mt := translate(len(nums), k, m)
if nums[mt] == target {
return mt
} else if nums[mt] > target {
r = m
} else {
l = m + 1
}
}
return -1
}
var _ = search