思路:前面数字>后面数字,波峰一定在当前及之前,前面数字<后面数字,波峰一定在这之后
时间复杂度二分log(N),空间复杂度O(1)
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int findPeakElement (int[] nums) {
// write code here
//首先nums[n] = -∞,所以后面一定往下走的趋势
int start = 0, end = nums.length - 1, mid = (end - start) / 2 + start;
while (start < end) {
if (nums[mid] > nums[mid + 1]) {
//前面的数>后面的数,波峰在前面(包含中间这个数)
end = mid;
} else {
//前面的数<后面的数,后面一定有波峰
start = mid + 1;
}
mid = (end - start) / 2 + start;
}
return mid;
}
}