674. 最长连续递增序列
给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度。
示例 1:
输入: [1,3,5,4,7]
输出: 3
解释: 最长连续递增序列是 [1,3,5], 长度为3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。
示例 2:
输入: [2,2,2,2,2]
输出: 1
解释: 最长连续递增序列是 [2], 长度为1。
动态规划——DP
实际上动态规划就是带有记事本的暴力算法
状态转移公式为:
d
p
[
i
]
=
{
d
p
[
i
−
1
]
+
1
n
u
m
s
[
i
]
>
n
u
m
s
[
i
−
1
]
1
e
l
s
e
dp[i]=\left\{ \begin{array}{rcl} dp[i-1]+1 & & {nums[i] > nums[i-1]}\\ 1 & & {else}\\ \end{array} \right.
dp[i]={dp[i−1]+11nums[i]>nums[i−1]else
def findLengthOfLCIS(self, nums: List[int]) -> int:
n=len(nums)
dp=[1]*n
if n<=1: return n
for i in range(1,n):
if nums[i] > nums[i-1]:
dp[i]=dp[i-1]+1
return max(dp)
这道题实际上不需要用数组储存值来浪费空间,完全可以用两个常数变量来记录距离
class Solution:
def findLengthOfLCIS(self, nums: List[int]) -> int:
L = 1
maxL= 1
n = len(nums)
if n<= 1:return n
for i in range(n-1):
if nums[i]<nums[i+1]:
L +=1
if L>maxL:
maxL=L
else:
L=1
return maxL