题解 | 乘积为正数的最长连续子数组 Py3
乘积为正数的最长连续子数组
https://www.nowcoder.com/practice/0112b9b5a09048d89309f55ea666db91
# 17:11
# 17:33完成
# 假设已知以j结尾最长的满足题意的的子数组长度,求j+1时的长度
# 此时得考虑数组a[j+1]的正负,需要考虑正负情况,因此动态规划的数组也需要考虑正负
# dp1[j]为以j结尾的时候,最长的乘积为正数的子数组长度
# dp2[j]为以j结尾的时候,最长的乘积为负数的子数组长度
n = int(input())
nums = list(map(int,input().split()))
dp1 = [0]*(n+1)
dp2= [0]*(n+1)
for j in range(1,n+1):
if nums[j-1] == 0:
continue
# 如果nums[j-1]为0,相当于从下个数重新开始计算,之前都归0了
if nums[j-1]>0:
dp1[j] = dp1[j-1] + 1
if dp2[j-1]>0:
dp2[j] = dp2[j-1]+1
else:
dp2[j] = dp1[j-1] + 1
if dp2[j-1]>0:
dp1[j] = dp2[j-1]+1
print(max(dp1))