A peak element is an element that is greater than its neighbors.
Given an input array nums, where nums[i] ≠ nums[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 nums[-1] = nums[n] = -∞.
Example 1:
Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.
Example 2:
Input: nums = [1,2,1,3,5,6,4]
Output: 1 or 5
Explanation: Your function can return either index number 1 where the peak element is 2,
or index number 5 where the peak element is 6.
给出一个数组,让找到其中的峰值
峰值:比左右邻居的值大
而且如果有多个峰值,返回一个即可
思路:
判断峰值:和左右比较,比左右都大
如果是从左到右遍历数组,相当于左边已经比较过,只需要比较右边
这时候假如有一个smaller的boolean数组,代表前一元素比后一元素小
因为题目中说nums[-1] = -∞,所以nums[-1] < nums[0], smaller的第一个元素是true
Input: nums = [1,2,1,3,5,6,4]
这时候smaller =[T, T, F, T, T, T, F]
可以看到峰值出现在[T, F]出现的地方
而题目中只要求返回一个峰值,所以只需要返回第一个F出现的地方,而刚开始一定是T的
所以只需要返回第一个nums[i] > nums[i+1]的index(i)
//0ms, faster than 100% (current time)
public int findPeakElement(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] > nums[i + 1]) {
return i;
}
}
return nums.length - 1;
}