#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param nums int整型一维数组
# @return int整型
#
class Solution:
    def findLongestSubArray(self, nums: List[int]) -> int:
        # write code here
        n = len(nums)#数组总长度
        dp1, dp2 = [0] * (n + 1), [0] * (n + 1)#乘积为正数/负数的最长连续子数组
        for i in range(1, n + 1):#遍历整个数组,当前元素为0时,之前归0重新开始计算
            if nums[i - 1] > 0:#当前元素为正数
                dp1[i] = dp1[i - 1] + 1#最长正数连续子数组在之前范围加1
                if dp2[i - 1] > 0:#最长负数连续子数组在之前范围也加1
                    dp2[i] = dp2[i - 1] + 1
            elif nums[i - 1] < 0:#当前元素为负数,正负最长数组要倒序
                dp2[i] = dp1[i - 1] + 1#最长负数连续子数组在最长正数连续子数组之前范围加1
                if dp2[i - 1] > 0:#之前最长负数连续子数组不为0,在最长正数连续子数组在之前最长负数连续子数组范围加1
                    dp1[i] = dp2[i - 1] + 1
        return max(dp1)