题解 | #寻找峰值#

寻找峰值

https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76

思路:

  1. 整体上的思路还是二分查找,核心就是考察的边界条件的判断,比如:左边界,右边界的判断,注意:不要出现的数据越界的情况。
  2. 第一次写右边界判断的时候,写成了mid + 1 >= nums.length && mid - 1 >= low && nums[mid - 1] < nums[mid],导致case:[3,6] 返回的结果是-1 ,原因是第二次判断的时候,mid = low=high, 此时mid-1>=low的条件就不满足,需要改成 mid-1>0,就满足条件了。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int findPeakElement (int[] nums) {
        // write code here
        if (nums.length == 1) {
            return 0;
        }
        int low = 0;
        int high = nums.length - 1;
        return search1(nums, low, high);
    }
    private int search1(int[] nums, int low, int high) {
        if (low > high) {
            return -1;
        }
        int mid = (low + high) / 2;
        //左边界
        if (mid - 1 < 0 && mid + 1 <= nums.length-1 && nums[mid + 1] < nums[mid]) {
            return mid;
        }
        //右边界
        if (mid + 1 >= nums.length && mid - 1 >= 0 && nums[mid - 1] < nums[mid]) {
            return mid;
        }
        if (mid - 1 >= 0 && mid + 1 < nums.length && nums[mid - 1] < nums[mid] && nums[mid] > nums[mid + 1]) {
            return mid;
        }
        int result1 = search1(nums, low, mid - 1);
        if (result1 != -1) {
            return result1;
        }
        int result2 = search1(nums, mid + 1, high);
        if (result2 != -1) {
            return result2;
        }
        return -1;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务