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

Find Peak Element

时间:2015-06-14 18:40:44      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

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.

click to show spoilers.

解题思路:

求一个数组的峰点下标,也就是这个数组的值大于他旁边的值。若有很多个峰值,责任选一个输出就行。

方法一:

比较O(2n)次
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        if(nums.size()==0) return -1;
        if(nums.size()==1) return 0;
        if(nums[0]>nums[1]) return 0;
        int n=nums.size();
        if(nums[n-2]<nums[n-1]) return n-1;
        for(int i=1;i<n-1;i++)
        {
            if(nums[i]>nums[i-1]&&nums[i]>nums[i+1])
            return i;
        }
    }
};

方法二:

比较O(n)次,因为nums[-1]=-∞.也就是最左边的是最小值,若出现一个值大于其右边的值,则此值便是一个峰值。
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        if(nums.size()==0) return -1;
        if(nums.size()==1) return 0;
        if(nums[0]>nums[1]) return 0;
        int n=nums.size();
        if(nums[n-2]<nums[n-1]) return n-1;
        for(int i=1;i<n;i++)
        {
            if(nums[i]<nums[i-1])
            return i-1;
        }
        return n-1;
    }
};

方法三

从两边向中间峰值靠拢,比较O(logn)次。
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        if(nums.size()==0) return -1;
        if(nums.size()==1) return 0;
        if(nums[0]>nums[1]) return 0;
        int n=nums.size();
        if(nums[n-2]<nums[n-1]) return n-1;
        int left=0;
        int right=n-1;
        while(left<=right)
        {
            int mid=(left+right)/2;
            if(left==right)
            return left;
            if(nums[mid]<nums[mid+1])
            left=mid+1;
            else
            right=mid;
        }
    }
};






Find Peak Element

标签:

原文地址:http://blog.csdn.net/sinat_24520925/article/details/46491441

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