算法 寻找峰值-(二分查找+反向双指针)
牛客网: 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坐标为峰值。
代码:
// gopackage main
// import "fmt"/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型一维数组 * @return int整型
*/
func findPeakElement( nums []int ) int {// write code hereif len(nums) == 0 {return -1}left, right := 0, len(nums) - 1for left < right {mid := left + (right-left)>>1if nums[mid] < nums[mid+1] {left = mid + 1} else {right = mid}}return right
}