常州市做网站的公司,百度一下百度一下你就知道,泰州seo推广公司,服务专业的公司网站设计注意
题目只要求找到一个峰值就可以了。nums[-1]和nums[n]这两个位置是负无穷#xff0c;也就是说#xff0c;除了数组的位置之外#xff0c;其它地方都是负无穷。对于所有有效的 i 都有 nums[i] ! nums[i 1]
方法一
遍历整个数组#xff0c;找到最高的那个点。时间复杂…注意
题目只要求找到一个峰值就可以了。nums[-1]和nums[n]这两个位置是负无穷也就是说除了数组的位置之外其它地方都是负无穷。对于所有有效的 i 都有 nums[i] ! nums[i 1]
方法一
遍历整个数组找到最高的那个点。时间复杂度O(n)
func findPeakElement(nums []int) int {maxIndex : 0for i : range nums {if nums[i] nums[maxIndex] {maxIndex i}}return maxIndex
}方法二 二分法其实看到O(logn)很容易就可以想到二分法。 二分法分开了之后mid是在中间的有可能是在上坡也有可能是在下坡也可能是在峰值峰值的话最后二分终止的时候也会找到的。 至于选择哪一边呢其实就按爬山来看就行了。如果是爬到上坡的话那一定就是有峰值的但是如果是下坡的话后面有可能有峰值也有可能是负无穷。 因为题目说的是-1和n位置是负无穷所以只要找到上坡就行找到上坡就一定会有解。 func findPeakElement(nums []int) int {l, r : 0, len(nums)-1for l r {mid : l (r - l)/2if nums[mid] nums[mid 1] { // 题目规定了nums[i] ! nums[i 1]所以可以不用考虑等于号的情况r mid // 左边大说明左边有峰值那就往左边靠} else {l mid 1 // 右边大说明右边有峰值那就往右边靠}}return l
}