题解 | #最长上升子序列(一)#

最长上升子序列(一)

https://www.nowcoder.com/practice/5164f38b67f846fb8699e9352695cd2f

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 给定数组的最长严格上升子序列的长度。
 * @param arr int整型一维数组 给定的数组
 * @return int整型
 */

// 解题思路:动态规划
// 定义状态:dp[i]为前i个字符串中构成最长递增序列的最大个数
// 状态转移:dp[i]=max(dp[i],dp[j]+1),j<i,但不一定相邻

function LIS(arr) {
    if(arr.length==0)return 0;
    const dp = Array(arr.length).fill(1);
    let maxSubLen = 1;
    for (let i = 1; i < arr.length; i++) {
        for (let j = 0; j < i; j++) {
            if (arr[j] < arr[i]) {
                // 尝试更新dp[i]
                dp[i] = Math.max(dp[i], dp[j] + 1);
                maxSubLen = Math.max(maxSubLen, dp[i]);
            }
        }
    }
    return maxSubLen;
}
module.exports = {
    LIS: LIS,
};

全部评论

相关推荐

jnsytgsyqj...:简历跟测试没关系,你更适合运营
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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