原题链接:https://leetcode.com/problems/find-peak-element/
这道题目意思是要求你在数组中找出一个peak值,这个peak值是比左右邻居要大,并且我们假设左边界和右边界都是无穷小。O(n)的解法是我们挨个的访问数组中的每个元素,查看它是不是比左右邻居要大。但这道题我们可以用二分搜索来做,时间是O(lgn)。因为题目不难,在此也就不详述思路了,直接代码如下:
public int findPeakElement(int[] nums) {
if(nums.length == 0)
return 0;
if(nums.length == 1)
return 0;
int l = 0;
int r = nums.length-1;
while(l<r)
{
int mid = (l+r)/2;
if(mid!=0 && nums[mid]>nums[mid-1]&&mid!=nums.length-1 && nums[mid]>nums[mid+1])
return mid;
if(nums[mid]<nums[mid+1])
{
l = mid+1;
}
else
{
r = mid-1;
}
}
return l;
}
二分查找几乎是面试的高频题,容易错的点就是二分的结束条件,到底是l<=r 还是l<r。朋友们还是需要好好的归纳一下。