码迷,mamicode.com
首页 > 其他好文 > 详细

菜鸟系列 Golang 实战 Leetcode —— 300. 最长上升子序列

时间:2020-03-14 18:28:03      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:func   lis   它的   lang   ret   说明   return   时间复杂度   动态规划   

300.最长上升子序列

给定一个无序的整数数组,找到其中最长上升子序列的长度。

示例:

输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
说明:

可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
你算法的时间复杂度应该为 O(n2) 。
进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?

题解

采用动态规划算法:d[i]=d[j]+1 if j<i&&nums[j]<nums[i]

func lengthOfLIS(nums []int) int {
    var length = len(nums)
    if length<=1{
        return length
    }
    var d = make([]int,length)
    d[0]=1
    var max =d[0]
    for i:=1;i<length;i++{
        d[i]=1
        for j:=0;j<i;j++{
            if nums[j]<nums[i]{
                if d[i]<d[j]+1{
                    d[i]=d[j]+1
                }
            }
        }
        if max<d[i]{
            max=d[i]
        }
    }
    return max
}

菜鸟系列 Golang 实战 Leetcode —— 300. 最长上升子序列

标签:func   lis   它的   lang   ret   说明   return   时间复杂度   动态规划   

原文地址:https://www.cnblogs.com/i-dandan/p/12493298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!