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 - 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
题解 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 - 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;
}