162. Find Peak Element
峰值元素是一個嚴格大於其鄰居的元素。
給定一個從 0 開始索引的整數數組 nums,找到一個峰值元素,並返回其索引。如果數組包含多個峰值,則返回其中任意一個峰值的索引。
你可以假設 nums[-1] = nums[n] = -∞。換句話說,一個元素總是被認為嚴格大於數組外的鄰居。
你必須編寫一個運行時間為 O(log n) 的算法。
範例 :
輸入:nums = [1,2,3,1]
輸出:2
解釋:3 是一個峰值元素,你的函數應返回索引 2。
Python
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
left, right = 0, len(nums) - 1
while left < right:
mid = (left + right) // 2
if nums[mid] > nums[mid + 1]:
right = mid
else:
left = mid + 1
return left
16.65MB, 51ms
C++
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] > nums[mid + 1]) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
};
11.23MB, 3ms
Javascript
/**
* @param {number[]} nums
* @return {number}
*/
var findPeakElement = function(nums) {
let left = 0, right = nums.length - 1;
while (left < right) {
let mid = Math.floor((left + right) / 2);
if (nums[mid] > nums[mid + 1]) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
};
49.14MB, 60ms