题解 | 乘积为正数的最长连续子数组 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))