Leetcode 162 Find Peak Element

2018-01-12 14:47:47 浏览数 (1)

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

Given an input array where num[i] ≠ num[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 num[-1] = num[n] = -∞.

For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.

找出局部极大值点,

正常的想法都是顺序扫一遍,虽然题很简单,但一开始我也想不通为什么用二分就可以?

后来看了这个PPT,http://courses.csail.mit.edu/6.006/spring11/lectures/lec02.pdf

看一下证明,其实很简单,绕不过来同学的可以看看。

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

0 人点赞