【LeetCode-by-python】674.最长连续递增序列

本文探讨了如何在Python中找到列表中最长的连续递增子序列,对比了两种不同的方法:一种是逐个元素检查并记录最长序列,另一种则是采用动态规划方法,通过实例详细解释了动态规划方案的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目如下:

在思考的过程中,非常不全面,每次都需要提交一下才能知道哪一方面没有考虑

没有考虑到的方面如下:

(1)未考虑list中元素全一样的情况:用list.count( )函数解决,如果list.count( ) = len(list),就说明list中元素一样

(2)未考虑list中,有两段以上连续的序列:用flag来记录连续序列的长度,并存入index中,全部遍历完毕,取Max(index)

(3)未考虑list是一个空的


最后通过提交的代码如下,很冗长

    def findLengthOfLCIS(self,nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        length = len(nums)
        index = []
        if length >= 1:
            key = nums.count(nums[0])
            if key == length:
                return 1
            else:
                flag = 1
                for i in range(length):
                    j = i + 1
                    while j < length:
                        if nums[i] < nums[j] and j <= length - 1:
                            flag += 1
                            break
                        else:
                            if i < length -1:
                                index.append(flag)
                                flag = 1
                                break
                            else:
                                return max(index)
                index.append(flag)
            return max(index)
        else:
            return 0

在用pycharm进行debug的时候,在python上存在以下几个问题:

  1. break 和continue不是很清楚
  2. 对于判断list的遍历索引的值上还需要多加练习

在另外一位博主那里看到了很简洁的方法,说是使用了动归(并不知道是什么),用IDEdebug了一下才看懂是怎样实现的:

代码如下:

def lengthOfLIS(self, nums):  
        """ 
        :type nums: List[int] 
        :rtype: int 
        """  
        if nums==[]:  
            return 0  
        N = len(nums)  
        Dp = [1]*N  
        for i in range(N-1):  
            for j in range(0,i+1):  
                if nums[i+1]>nums[j]:  
                    Dp[i+1] = max(Dp[i+1],Dp[j]+1)  
        return max(Dp)  

思路:用Dp来存储nums中0~i个最长连续递增序列的个数,比如Dp[3]表示,nums中0~3个元素的最长递增序列个数

举一个具体的例子便于理解:

nums=[5,6,7,3,2,1]

Dp[0] = 1,Dp[1] = 2,Dp[2] =3,Dp[3] =3(因为在nums[3]之前最长的递增序列仍然是3,这一步是通过Dp[i+1] = max(Dp[i+1],Dp[j]+1)来实现的,同样的,Dp[4] =3 ,Dp[5] = 3

最后只要返回Max(Dp)就可以,使用了插入排序的方法,只是加入了存储最长序列个数的Dp

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值