码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Find Peak Element

时间:2014-12-08 21:07:19      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   div   

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.

Note:

Your solution should be in logarithmic complexity.

解题思路:重点在于对数时间复杂度,想到二分查找,且只要找出一个即可。

  1.若数组只有一个数字,那么它就是峰值。

  2.如果数组只有2个数字,则比较一下大的为峰值。

  3.如果数组数字大于2,先判断峰值在不在最左和最右端点,如果不在,则进行二分查找,mid = (start + end)>>1;如果num[mid]恰好是峰值返回,否则num[mid]会是下面几种情况:a.处在下坡。   b.处在上坡     c.在最低点(可以看成前面任意一种情形)

    如果在下坡,那么在[start,mid]区间必有峰值,因为在start处是上升的,在mid处是下降的。其他情况同理。

class Solution {
public:
    int findPeak(vector<int> num,int start,int end)
    {
        int mid = (start + end)>>1; 
        if(num[mid]>num[mid+1] && num[mid]>num[mid-1])return mid;
        else if(num[mid]>num[mid+1])
        {
            return findPeak(num,start,mid);
        }
        else
            return findPeak(num,mid,end);
    }
    int findPeakElement(const vector<int> &num) {
        int len = num.size();
        if(len==1)return 0;
        if(num[0]>num[1])return 0;
        if(num[len-1]>num[len-2])return len-1;
        return findPeak(num,0,len-1);
    }
};

 

LeetCode Find Peak Element

标签:style   blog   io   ar   color   sp   for   on   div   

原文地址:http://www.cnblogs.com/55open/p/4151868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!