题解 | #寻找峰值#

寻找峰值

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;
    }
}

全部评论

相关推荐

有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务