dpP[i]包含nums[i]的,乘机为正的最长子数组的长度,
dpN[i]包含nums[i]的,乘机为负的最长子数组的长度,
只有当nums[i]为负数的时候,才会改变乘机的符号;
from typing import List
inf = float('inf')
class Solution:
def getMaxLen(self, nums: List[int]) -> int:
n = len(nums)
dp = [[0]*2 for _ in range(n+1)]
res = 0
for i in range(1, n+1):
if nums[i-1] > 0:
dp[i][0] = dp[i-1][0] + 1
if dp[i-1][1] > 0: # 正->负
dp[i][1] = dp[i-1][1]+1
elif nums[i-1] < 0:
dp[i][1] = dp[i-1][0] + 1
if dp[i-1][1] > 0: # 负->正
dp[i][0] = dp[i-1][1] + 1
res = max(res, dp[i][0])
return res