题解 | #寻找峰值#
寻找峰值
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找工作#