leetcode 162

https://leetcode-cn.com/problems/find-peak-element/

这题有点牛,一开始觉得不可做,怎么都能hack。看了题解,觉得不大对,想hack,但弄着弄着好像知道为啥这么做了。

这题主要注意两个点,所有元素都是unique的以及数组两端都有一个无穷小,这两个有什么用呢?
unique主要是防止这种:5 4 3 6 6 6,无穷小我们可以发现一个性质:我们从中间开始找,只要有数组一边是递增的,答案必在那边!为什么呢?数组一边递增只有两种可能,先增后减以及单调递增,前者答案已经有了,后者因为数组末端是无穷小,所有这种情况答案必在数组末尾。好了已经做完了

int findPeakElement(int* nums, int numsSize)
{
    int l=0,r=numsSize-1;
    while(l<r)
    {
        int mid=l+r>>1;
        if(nums[mid]>nums[mid+1])
        {
            r=mid;
        }
        else
        {
            l=mid+1;
        }
    }
    return l;
}

猜你喜欢

转载自blog.csdn.net/qq_37073764/article/details/106293424