162. Find Peak Element

这道题基于的特质是,如果是一个递减序列,那么左起第一个数就是peak element,如果是递增数列,那么右侧第一个是

所以可以使用二分搜索,如果一个mid本身并不是peak element,那么它如果比右侧大的话,那么说明左侧(包括它自己)一定有一个最优解,否则右侧(不包括它自己)一定有一个最优解。

 

 1     public int findPeakElement(int[] nums) {
 2         if(nums.length == 0) {
 3             return -1;
 4         }
 5         int left = 0;
 6         int right = nums.length - 1;
 7         while(left < right) {
 8             int mid = left + (right - left) / 2;
 9             if(nums[mid] > nums[mid + 1]) {
10                 right = mid;
11             } else {
12                 left = mid + 1;
13             }
14         }
15         return left;
16     }

 

posted @ 2016-06-29 05:53  warmland  阅读(93)  评论(0编辑  收藏  举报