题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
写的时候忽略了题目中的相邻不相等条件,
就写了一个有相邻有相同元素也能找到波峰的二分查找(话说两边都覆盖了还算不算...)
import java.util.*;
public class Solution {
public int findPeakElement (int[] nums) {
return binarySearch(nums, 0, nums.length);
}
public int binarySearch(int[] nums, int left, int right) {
if(left >= right) return -1;//递归写法和循环有点不一样的是, 如果用左闭右开, 那么left是要<=right的
int mid = left + (right - left) / 2;
int leftVal = Integer.MIN_VALUE;
int rightVal = Integer.MIN_VALUE;
if(mid - 1 > -1) {
leftVal = nums[mid - 1];
}
if(mid + 1 < nums.length) {
rightVal = nums[mid + 1];
}
if(leftVal < nums[mid] && nums[mid] > rightVal) {
return mid;
} else {
int res = binarySearch(nums, left, mid);
if(res > -1) return res;
else return binarySearch(nums, mid+1, right);
}
}
}
#Java求职##Java找工作#
查看27道真题和解析