mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
49 lines
1.2 KiB
Plaintext
49 lines
1.2 KiB
Plaintext
---
|
|
title: '162. Find Peak Element'
|
|
description: A peak element is an element that is strictly greater than its neighbors
|
|
icon: dot
|
|
topics:
|
|
- { name: "Array", slug: "array" }
|
|
- { name: "Binary Search", slug: "binary-search" }
|
|
issue: "https://github.com/prdlk/leetcode/issues/64"
|
|
sidebar:
|
|
label: 'Find Peak Element'
|
|
badge: 'Medium'
|
|
---
|
|
|
|
::::warning
|
|
You must write an algorithm that runs in O(log n) time.
|
|
::::
|
|
|
|
### Example 1:
|
|
- Input: `nums = [1,2,3,1]`
|
|
- Output: `2`
|
|
- Explanation: `3` is a peak element and your function should return the index number `2`.
|
|
|
|
### Example 2:
|
|
- Input: `nums = [1,2,1,3,5,6,4]`
|
|
- Output: `5`
|
|
- Explanation: Your function can return either index number `1` where the peak element is `2`, or index number `5` where the peak element is `6`.
|
|
|
|
### Constraints:
|
|
|
|
- `1 <= nums.length <= 1000`
|
|
- `-2^31 <= nums[i] <= 2^31 - 1`
|
|
- `nums[i] != nums[i + 1] for all valid i.`
|
|
|
|
## Solution
|
|
|
|
```py
|
|
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]:
|
|
left = mid + 1
|
|
else:
|
|
right = mid
|
|
|
|
return left
|
|
```
|