求先递增后递减数组最大值的下标
给定数组 a, 里面的元素先严格递增后严格递减, 求最大值元素的下标.
满足时间复杂度 O(logn) 的二分查找. 那么查找的"峰顶"元素会满足大于左侧元素, 也大于右侧元素, 即 a[i] > a[i-1] && a[i] > a[i+1].
int findPeak(int[] nums){
2 if (nums != null && nums.length > 0) {
3 if (nums.length == 1) {
4 return 0;
5 }
6 if (nums[0] > nums[1]) {//数组单调递减
7 return 0;
8 }
9 int index = nums.length-1;
10 if (nums[index] > nums[index-1]) {//数组单调递增
11 return index;
12 }
13 int i = 0, j = index;
14 int mid = 0;
15 while (i < j) {//二分查找
16 mid = (i + j) / 2;
17 if (nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]) {
18 return mid;
19 } else if (nums[mid] > nums[mid + 1]) {//处于下坡段, 即递减段
20 j = mid - 1;
21 } else if (nums[mid] > nums[mid - 1]) {//处于上坡段, 即递增段
22 i = mid + 1;
23 }
24 }
25 }
26 return -1;
27 }









网友评论