1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package main
- import (
- "fmt"
- )
- // ??? so many problems here
- func search(nums []int, target int) bool {
- if len(nums) == 0 {
- return false
- }
- beg, end := 0, len(nums)-1
- var mid int
- // how to find the smallest num of arr?
- for beg < end {
- mid = (beg + end) / 2
- if nums[mid] > nums[end] {
- beg = mid + 1
- } else if nums[mid] < nums[end] {
- end = mid - 1
- } else {
- for nums[mid] < nums[(mid+1)%len(nums)] {
- mid = (mid + len(nums) - 1) % len(nums)
- }
- break
- }
- }
- fmt.Println(mid)
- if target == nums[mid] {
- return true
- }
- if target < nums[0] {
- beg, end = mid+1, len(nums)-1
- } else {
- beg, end = 0, mid-1
- }
- for beg <= end {
- mid = (beg + end) / 2
- if target < nums[mid] {
- end = mid - 1
- } else if target > nums[mid] {
- beg = mid + 1
- } else {
- return true
- }
- }
- return false
- }
- func main() {
- a1 := []int{4, 5, 6, 6, 6, 7, 7, 0, 0, 1, 1, 2, 2, 3}
- fmt.Println(search(a1, 6))
- fmt.Println(search(a1, 4))
- fmt.Println(search(a1, 3))
- fmt.Println(search(a1, 7))
- fmt.Println(search(a1, 9))
- a2 := []int{1, 3}
- fmt.Println(search(a2, 3))
- a3 := []int{3, 1}
- fmt.Println(search(a3, 3))
- fmt.Println(search(a3, 1))
- }
|