题解 | #寻找峰值#

寻找峰值

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

我的思路很简单(但是效率不太高就是了。。。),就是从左往右遍历整个数组。那么问题就来了!这时间复杂度不就是O(n)吗?别急,我们有个小小的优化就是:如果当前数比右边一位的数大,那么很明显右边那个数肯定不是峰值,直接跳过。(其实思路很简单,但是效率真不高。挠头。)



public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    public int findPeakElement (int[] nums) {
        // write code here
        if (1 == nums.length) {
            return 0;
        }
        if (2 == nums.length) {
            return nums[0] > nums[1] ? 0 : 1;
        }
        // 具体代码如下
        // 定义一个整型变量,用于存放最终的返回结果
        int rs = Integer.MIN_VALUE;
        if (nums[0] > nums[1]) {
            return 0;
        }
        if (nums[nums.length - 1] > nums[nums.length - 2]) {
            return nums.length - 1;
        }
        for (int i = 1; i < nums.length - 1; i++) {
            if (nums[i] > nums[i + 1] && nums[i] > nums[i - 1]) {
                rs = i;
                break;
            }
            if (nums[i] > nums[i + 1]) {
                i++;
            }
        }
        return rs;
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务