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 }