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

162. Find Peak Element

时间:2018-06-02 11:39:34      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:can   i+1   out   you   TE   while   mit   The   multi   

问题描述:

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] = -∞.

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: 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.

Note:

Your solution should be in logarithmic complexity.

 

解题思路:

这道题一开始我想:从头到位遍历一遍比较一下不就找到了吗?直到我看到了要求:在logn的复杂度

说到logN,首先就会想到二分法。

那么二分法怎样才能应用到这道题目上呢?

去中间值没有问题,下一步该怎么做呢?

可以用中间的值nums[mid]去和右边的相邻的值nums[mid + 1]进行比较:

若nums[mid] < nums[mid + 1]: 说明在左半部分是一个上升的部分,那么峰值可能会出现

若nums[mid] > nums[mid+ 1]: 说明在包含mid的右半部分可能会有峰值出现

 

代码:

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

 可参考资料:http://courses.csail.mit.edu/6.006/spring11/lectures/lec02.pdf

162. Find Peak Element

标签:can   i+1   out   you   TE   while   mit   The   multi   

原文地址:https://www.cnblogs.com/yaoyudadudu/p/9124170.html

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