核心思路就是找个数组的最大值
标签:二分查找 过程:
- 首先要注意题目条件,在题目描述中出现了 nums[-1] = nums[n] = -∞,这就代表着 只要数组中存在一个元素比相邻元素大,那么沿着它一定可以找到一个峰值
- 根据上述结论,我们就可以使用二分查找找到峰值
- 查找时,左指针 l,右指针 r,以其保持左右顺序为循环条件
- 根据左右指针计算中间位置 m,并比较 m 与 m+1 的值,如果 m 较大,则左侧存在峰值,r = m,如果 m + 1 较大,则右侧存在峰值,l = m + 1
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int findPeakElement (int[] nums) {
// write code here
int n = nums.length;
if (n == 1) return 0;
int l = 0, r = n - 1;
while (l < r) {
int mid = (l+r)/2;
if (nums[mid] > nums[mid+1]){
r = mid;
}
else l = mid + 1;
}
return l;
}
}