Leetcode -- 162. 寻找峰值
Problem: 162. 寻找峰值
思路
根据题目条件,一个数的左边比它大,那么它的左边一定存在一个峰值,右边同理
解题方法
利用二分法查找峰值,注意特殊边界的特判。
复杂度
时间复杂度:
添加时间复杂度, 示例: $Olog(n)$
空间复杂度:
添加空间复杂度, 示例: $Olog(n)$
Code
class Solution {
public int findPeakElement(int[] nums) {
int len = nums.length;
if (len == 1 || nums[0] > nums[1]) {
return 0;
}
if (nums[len - 1] > nums[len - 2]) {
return len - 1;
}
int left = 0;
int right = len - 1;
int mid;
while (left <= right) {
mid = left + ((right - left) >> 1);
if (mid == 0) {
return nums[0] > nums[1] ? 0 : 1;
} else if (mid == len - 1) {
return nums[mid] > nums[mid - 1] ? mid : mid-1;
}
if (nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]) {
return mid;
}
if (nums[mid - 1] > nums[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
}