A peak element is an element that is greater than its neighbors.
Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.
The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.
You may imagine that num[-1] = num[n] = -∞.
For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.
查找峰值元素
用正常遍历 还有单调栈两种做法做出来了 但时间复杂度是O(n) 答案是O(lgn)的 二分查找竟然还可以这么用
public int findPeakElement(int[] nums) {
return search(nums, 0, nums.length - 1);
}
public int search(int[] nums, int l, int r) {
if (l == r)
return l;
int mid = (l + r) / 2;
if (nums[mid] > nums[mid + 1])//1.
return search(nums, l, mid);
return search(nums, mid + 1, r);
}
}1.nums[mid] > nums[mid+1] 峰值在左边 继续向左找
否则向右找
画个图就非常好理解了
本文介绍了一种使用二分查找法高效查找峰值元素的算法。峰值元素是指大于其相邻元素的元素,在数组中可能存在多个峰值,返回任一峰值的索引即可。文章提供了具体的Java代码实现,并解释了算法的时间复杂度为O(log n)。
364

被折叠的 条评论
为什么被折叠?



