【leetcode】162. Find Peak Element

题目

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.

思路

很简单,二分查找。
注意边界值,虽然不加上前面的限制也可以过,但是还是想得细一点比较好。

代码

int findPeakElement(int *nums, int numsSize)
{
    if(numsSize < 2)return 0;
    int left = 0, right = numsSize - 1;
    if(*nums > *(nums + 1))return 0;
    if(*(nums+right) > *(nums + right - 1))return right;
    while (left < right)
    {
        int mid = left + (right - left) / 2;
        if (nums[mid] > nums[mid + 1])
        {
            if (nums[mid] > nums[mid - 1])//满足峰值条件
                return mid;
            else    //峰值在左边
                right = mid - 1;
        }
        else //峰值在右边
            {
                left = mid + 1;
            }
    }
    return left;
}

猜你喜欢

转载自www.cnblogs.com/zhaijiayu/p/9635199.html
今日推荐