题解 | #最长山脉#
最长山脉
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 ; } }#软件开发薪资爆料#