Open lively-krishnan opened 2 years ago
题解: 找到最大值,循环看到一样的,直接返回下标
var findPeakElement = function(nums) {
const max = Math.max(...nums)
for(let i = 0; i < nums.length; i++) {
if(nums[i] === max) return i
}
};
题解: 使用双指针, 先找到中间值,然后判断 nums[mid] 是否比后面一个大,如果大的话,则缩小边界 right 等于 中间值 继续再找中间值,在缩小边界...
var findPeakElement = function(nums) {
let left = 0
let right = nums.length - 1
while(left < right) {
let mid = Math.floor(left + (right - left) / 2)
if(nums[mid] > nums[mid + 1]){
right = mid
}else {
left = mid + 1
}
}
return left
};
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞ 。
你必须实现时间复杂度为 O(log n) 的算法来解决此问题。