Find Peak Element

Tags : array, binary-search, leetcode, cpp, medium

A peak element is an element that is strictly greater than its neighbors.

Given an integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.

You may imagine that nums[-1] = nums[n] = -∞.

You must write an algorithm that runs in O(log n) time.

Examples #

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 #

Solutions #

class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        
        if(nums.size() == 1) return 0;
        int l=0, r =nums.size()-1;
        
        while(l<r){
            
            int mid = (l+r)>>1;
            if(nums[mid]>nums[mid+1]) r = mid;
            else l=mid+1;
            
        }
        
        return l;
    }
};