题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
1、左右指针,找出中间点,比较趋势,尽量让中间点处于峰值;
2、如果中间点大于右边,则右边取代中间点
3、如果中间点小于或者等于右边,则峰值可能在中间点的右边一个或者在中间点的右边,尽可能的缩小左右包含中间点的范围
4、如果左右点相邻的最后情况,中间点肯定在左节点上,因为取模求出的中间点
5、当中和左重合的时候,如果发现中间的比右边大的时候,右边再靠拢,直到左边和右边的点重合,就推出返回左点
6、当中和左重合的时候,如果中间的比右边的小,那么左会往前再进一位,到达更高点。
import java.util.*; 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 left = 0, right = n - 1; while (left < right) { int mid = (left + right) >> 1; if (nums[mid] > nums[mid + 1]) { right = mid; } else { left = mid + 1; } } return left; } }