题目
峰值元素是指其值大于左右相邻值的元素。
给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。
数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞。
示例 1:
1 | Input: nums = [1,2,3,1] |
示例 2:
1 | Input: nums = [1,2,1,3,5,6,4] |
说明:
- 你的解法应该是 O(logN) 时间复杂度的。
解法
解法一:
遍历一趟,遇到nums[i] > nums[i + 1]就返回当前的i
Java
1 | public int findPeakElement(int[] nums) { |
解法二:
二分查找。
根据得到的中点位置mid,判断后续是在左半部分还是右半部分搜索。比如:
数组:1,2,3,4,5,4,5,6,7。假设 mid = 4, mid + 1 = 5. 此时mid刚好是第一个峰值,那么就可以继续在左半部分搜索。
数组:1,2,3,4,5,4,5,6,7。假设 mid=3,mid + 1 = 4. 此时还没到右半部分,说明要继续在右半部分搜索。
1 | public int findPeakElement(int[] nums) { |