package main import ( "fmt" ) func main() { num := 0 for { n, _ := fmt.Scan(&num) if n == 0 { break } else { arr := make([]int, num) for i:=0; i<len(arr); i++ { fmt.Scan(&arr[i]) } fmt.Println(process(arr, 0, len(arr)-1)) } } } // 利用二分查找原型,找中间点,看能不能找到满足条件的 // 找不到去左边找,左边找不到去右边找,最差情况下也得o(n) func process(arr []int, l, r int) int { if l >= r { return -1 } mid := (r-l)/2 + l if mid-1 >= 0 && mid+1 <= len(arr)-1 && arr[mid] < arr[mid-1] && arr[mid] < arr[mid+1] { return mid } else if mid-1 < 0 && mid+1 <= len(arr)-1 && arr[mid] < arr[mid+1] { return mid } else if mid-1 >= 0 && mid+1 > len(arr)-1 && arr[mid] < arr[mid-1] { return mid } else { left := process(arr, l, mid-1) if left != -1 { return left } right := process(arr, mid+1, r) if right != -1 { return right } return -1 } }