| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | 
							- package main
 
- func findPeakElement(nums []int) int { // Return peak index
 
- 	length := len(nums)
 
- 	if length == 1 {
 
- 		return 0
 
- 	}
 
- 	beg, end := 0, length-1 // Index is important
 
- 	mid := (beg + end) / 2
 
- 	for beg < end {
 
- 		midLeft := (beg + mid) / 2
 
- 		if nums[midLeft] > nums[mid] {
 
- 			end = mid
 
- 			mid = midLeft
 
- 			continue
 
- 		}
 
- 		midRight := (mid + end) / 2
 
- 		if nums[midRight] > nums[mid] {
 
- 			beg = mid
 
- 			mid = midRight
 
- 			continue
 
- 		}
 
- 		if mid == midRight {
 
- 			break // Avoid infinity loop
 
- 		}
 
- 		beg = midLeft
 
- 		end = midRight
 
- 	}
 
- 	if end > length-1 || nums[mid] > nums[end] {
 
- 		return mid
 
- 	}
 
- 	return end
 
- }
 
- // func main() {
 
- // 	println(findPeakElement([]int{
 
- // 		1, 2, 1, 3, 5, 6, 4}))
 
- // 	println(findPeakElement([]int{
 
- // 		1, 2}))
 
- // 	println(findPeakElement([]int{
 
- // 		1, 2, 1, 3, 2, 1}))
 
- // 	println(findPeakElement([]int{
 
- // 		1, 2, 3, 1, 2, 1}))
 
- // 	println(findPeakElement([]int{
 
- // 		-67, -60, 78, 31, -24, -78, -89, 14, -18, 39, //   0~9
 
- // 		-4, 60, -33, 77, 48, 22, 88, -40, -83, 25, //     10~19
 
- // 		-55, 68, 61, -72, -77, 8, -11, 90, -75, -86, //   20~29
 
- // 		-85, -66, -79, 26, 30, 32, 81, 27, 12, 86, //     30~39
 
- // 		23, -41, 20, -58, 57, 10, 54, -27, -63, -94})) // 40~49
 
- // }
 
 
  |