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

全部评论

相关推荐

06-18 15:03
门头沟学院 Java
至少实习看起来比去年好?问了下群里的同学和身边的同学,人均有offer。有的还有好几个大厂offer
菜鸟1973:上一年暑期也是人均大厂实习offer,结果秋招跟不招人一样,大部分都转正了
点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务