Leetcode845 最长的山脉

 

  JAVA 递归描述:

复制代码
   int re = 0;

    public final int longestMountain(int[] arr) {
        if (arr.length < 3) return 0;
        longest(arr, 1, 0, 0);
        return re == 0 ? re : re + 1;
    }

    private final void longest(int[] arr, int end, int upLen, int downLen) {
        if (end == arr.length) {
            if (downLen > 0) re = Math.max(re, upLen + downLen);
            return;
        }
        if (arr[end - 1] < arr[end]) {
            if (downLen > 0) {
                re = Math.max(re, upLen + downLen + 1);
                longest(arr, end + 1, 0, 0);
            } else longest(arr, end + 1, upLen + 1, 0);
            return;
        }
        if (arr[end - 1] == arr[end]) {
            if (downLen > 0) re = Math.max(re, upLen + downLen);
            longest(arr, end + 1, 0, 0);
            return;
        }
        if (upLen > 0) {
            re = Math.max(re, upLen + downLen);
            longest(arr, end + 1, upLen, downLen + 1);
        } else longest(arr, end + 1, 0, 0);
    }
复制代码

  JS 递推描述:

复制代码
/**
 * @param {number[]} arr
 * @return {number}
 */
var longestMountain = function (arr) {
    if ((!arr) || arr.length < 3) return 0;
    let up = 0, down = 0, re = 0;
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] > arr[i - 1]) {
            if (down > 0) {
                re = Math.max(re,up + down + 1);
                up = 1;
                down = 0;
            } else up++;
            continue;
        }
        if (arr[i] == arr[i - 1]) {
            if (down > 0) {
                re = Math.max(re,up + down + 1);
                up = 0;
                down = 0;
            } else up = 0;
            continue;
        }
        if (up != 0) {
            down++;
            re = Math.max(re,up + down + 1);
        }
    }
    return re;
};
复制代码

 

posted @   牛有肉  阅读(90)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示