跳到主要内容

162.寻找峰值

链接:162.寻找峰值
难度:Medium
标签:数组、二分查找
简介:给你一个整数数组 nums,找到峰值元素并返回其索引。

题解 1 - javascript

  • 编辑时间:2021-09-15
  • 执行用时:68ms
  • 内存消耗:39.6MB
  • 编程语言:javascript
  • 解法介绍:On 循环。
function findPeakElement(nums: number[]): number {
const n = nums.length;
if (n === 1) return 0;
if (nums[0] > nums[1]) return 0;
if (nums[n - 1] > nums[n - 2]) return n - 1;
for (let i = 1; i <= n - 1; i++) {
if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) return i;
}
return 0;
}

题解 2 - javascript

  • 编辑时间:2021-09-15
  • 执行用时:76ms
  • 内存消耗:39.4MB
  • 编程语言:javascript
  • 解法介绍:二分查找。
function findPeakElement(nums: number[]): number {
let l = 0;
let r = nums.length - 1;
while (l < r) {
const mid = (l + r) >> 1;
if (nums[mid] > nums[mid + 1]) r = mid;
else l = mid + 1;
}
return l;
}

题解 3 - python

  • 编辑时间:2023-12-18
  • 执行用时:44ms
  • 内存消耗:16.06MB
  • 编程语言:python
  • 解法介绍:遍历。
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
n = len(nums)
for i in range(1, n - 1):
if nums[i - 1] < nums[i] > nums[i + 1]:
return i
return max((nums[i], i) for i in range(n))[1]

题解 4 - python

  • 编辑时间:2023-12-18
  • 执行用时:40ms
  • 内存消耗:16.1MB
  • 编程语言:python
  • 解法介绍:二分。
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
l, r = 0, len(nums) - 1
while l < r:
m = (l + r) // 2
if nums[m] > nums[m + 1]: r = m
else: l = m + 1
return l