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

最长上升子序列(一)

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

package main

func LIS( arr []int ) int {
    // write code here dp[i] 表示以 i 结尾的子数组的最长上升子序列
    if len(arr) == 0 {
        return 0
    }
    n, ans := len(arr), 1
    dp := make([]int, n)
    for i := 0; i < n; i++ { // 每个数组最少代表 1 个子序列长度
        dp[i] = 1
    }
    for i := 1; i < n; i++ {
        for j := 0; j < i; j++ {
            if arr[j] < arr[i] {
                dp[i] = max(dp[i], dp[j] + 1)
                ans = max(ans, dp[i])
            }
        }
    }
    return ans
}
func max(a, b int) int { if a < b { return b }; return a }

全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
天门一键开:她的意思是问你有没有论文吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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