leetcode之最長連續遞增序列
阿新 • • 發佈:2021-01-25
技術標籤: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。