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