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;
}