牛客网: BM19
题目: 寻找数组峰值,可能多个返回任一个,每个值满足nums[i] != nums[i + 1]
思路: 双指针 left = 0, right = n-1, 相向而行,取中间位置mid, nums[mid]与nums[mid+1]比较,如果nums[mid] < nums[mid+1],说明峰值在mid或mid右边,令left = mid + 1,此时right=mid时,可直接终止;否则峰值在mid或mid左边,令right = mid, 此时left为mid时直接终止;循环条件为当不满足 left < right时停止,right坐标为峰值。
代码:
- // go
-
- package main
- // import "fmt"
-
- /**
- * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
- *
- *
- * @param nums int整型一维数组
- * @return int整型
- */
- func findPeakElement( nums []int ) int {
- // write code here
- if len(nums) == 0 {
- return -1
- }
- left, right := 0, len(nums) - 1
- for left < right {
- mid := left + (right-left)>>1
- if nums[mid] < nums[mid+1] {
- left = mid + 1
- } else {
- right = mid
- }
- }
- return right
- }