王廷瑋|數位醫療|智慧醫療: 162. Find Peak Element WFU

2024年7月8日 星期一

162. Find Peak Element

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