求先递增后递减数组最大值的下标

求先递增后递减数组最大值的下标

给定数组 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 }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容