1. 程式人生 > 其它 >leetcode之最長連續遞增序列

leetcode之最長連續遞增序列

技術標籤:leetcode

思路:使用動態規劃,建立一個數組f,f[i]表示以nums[i]結束的的連續序列長度。ps:剛好期末考試考了最大遞增子序列,手動狗頭。
時間複雜度: O ( n ) O(n) O(n)
空間複雜度: O ( m ) O(m) O(m)

class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        if nums==[]:
            return 0
        f = [1 for _ in range(len(nums))]
        for
i in range(1,len(nums)): if nums[i]>nums[i-1]: f[i] = max(f[i], f[i-1]+1) Max = -1 for item in f: Max = max(Max, item) return Max


官方答案

貪心在這裡插入圖片描述
時間複雜度: O ( n ) O(n) O(n)
空間複雜度: O ( 1 ) O(1) O(1)

class Solution:
    def findLengthOfLCIS(self,
nums: List[int]) -> int: ans = 0 n = len(nums) start = 0 for i in range(n): if i > 0 and nums[i] <= nums[i - 1]: start = i ans = max(ans, i - start + 1) return ans

思考得還是不夠深入,最大遞增子序列為什麼要一個數組f,那是因為當前元素可以和前面多個元素行程遞增子序列,所以需要有一個數組來存取序列長度的最大值。但這題要求遞增子序列是連續的,只能和前面的數形成序列,所以並不需要陣列f。