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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章