题解 | #最长山脉#

最长山脉

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型ArrayList
     * @return int整型
     */
    public int longestmountain (ArrayList<Integer> nums) {
        if (nums == null || nums.size() <= 3) {
            return 0;
        }

        // 当前山脉长度
        int len = 0;
        // 历史最长山脉
        int maxLen = 0;
        // 前差值
        int preSub = 0;
        // 爬山
        boolean addFlag = false;
        // 下山
        boolean decFlag = false;

        for (int i = 1; i < nums.size(); i++) {
            int sub = nums.get(i) - nums.get(i - 1);
            if (sub > 0 || (addFlag && preSub != 0 && sub < 0)) {
                //当preSub <= 0 && sub > 0时,需要重算长度=2,其他情况长度+1
                len = preSub <= 0 && sub > 0 ? 2 : len + 1;
                // 爬山
                addFlag = addFlag ? addFlag : sub > 0;
                // 下山
                decFlag = decFlag ? decFlag : sub < 0;
            } else {
                // 长度置为0
                len = 0;
                // 爬山、下山标志置为false
                addFlag = decFlag = false;
            }
            // 当爬山、下山都为true时,更新历史最长山脉
            if (addFlag && decFlag) {
                maxLen = maxLen > len ? maxLen : len;
            }
            preSub = sub;
        }

        return maxLen == 0 ? 0 : maxLen ;
    }
}

#软件开发薪资爆料#
全部评论

相关推荐

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