Leetcode162. Find Peak Element寻找峰值

示例 2:

输入: nums = [1,2,1,3,5,6,4] 输出: 1 或 5 解释: 你的函数可以返回索引 1,其峰值元素为 2;   或者返回索引 5, 其峰值元素为 6。

说明:

你的解法应该是 O(logN) 时间复杂度的。

二分法:

如果中间的是峰值直接返回,如果不是,那么两边较大的那一侧是存在峰值的。

class Solution {
public:
    int findPeakElement(vector<int>& nums) 
    {
        int len = nums.size();
        if(len == 1)
            return 0;
        int low = 0;
        int high = len - 1;
        while(low <= high)
        {
            int mid = (low + high) / 2;
            if(mid == 0 || mid == len - 1)
            {
                if(mid == 0)
                {
                    if(nums[mid] > nums[mid + 1])
                        return mid;
                    else
                        low = mid + 1;
                }
                else if(mid == len - 1)
                {
                    if(nums[mid] > nums[mid - 1])
                        return mid;
                    else
                        high = mid - 1;
                }
            }
            else if(nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1])
            {
                return mid;
            }
            else
            {
                if(nums[mid - 1] > nums[mid + 1])
                {
                    high = mid - 1;
                }
                else
                {
                    low = mid + 1;
                }
            }
        }
        return -1;
    }
};
原文地址:https://www.cnblogs.com/lMonster81/p/10433832.html