add new solutions
This commit is contained in:
parent
d798d5e8c9
commit
886b5e0a8e
34 changed files with 1164 additions and 0 deletions
46
solutions/0/q33/solution.go
Normal file
46
solutions/0/q33/solution.go
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue