[LeetCode]162. Find Peak Element

寻找极值

Posted by JinFei on September 15, 2021

题目描述

A peak element is an element that is greater than its neighbors.
Given an input array nums, where nums[i] ≠ nums[i+1], find a peak element and return its index.
The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.
You may imagine that nums[-1] = nums[n] = -∞.

NOTE

Your solution should be in logarithmic complexity.

Example1:

  Input: nums = [1,2,3,1]
    Output: 2
    Explanation: 3 is a peak element and your function should return the index number 2.

Example2:

  Input: nums = [1,2,1,3,5,6,4]
    Output: 1 or 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.

解题思路

  • 寻找峰值,可以举个例子,利用二分搜索,如果data[mid] < data[mid + 1],那我们移动 start 指针即可,否则移动 end 指针
  • 二分搜索
  • 0328 -> 应该找峰值最大的地方
  • 贪心二分 如果发现 nums[i] < nums[i + 1],那么右侧必定有峰
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int start = 0;
        int end = nums.size() - 1;
        int n = nums.size();
        while(start <= end){
            int mid = (end + start) / 2;
            if(mid < n - 1 && nums[mid] < nums[mid + 1]){
                start = mid + 1;
            }else{
                end = mid - 1;
            }
        }
        return start;
    }
};