Maximum Length of Subarray With Positive Product

Given an array of integers nums, find the maximum length of a subarray where the product of all its elements is positive.

A subarray of an array is a consecutive sequence of zero or more values taken out of that array.

Return the maximum length of a subarray with positive product.

 

Example 1:

Input: nums = [1,-2,-3,4]
Output: 4
Explanation: The array nums already has a positive product of 24.

Example 2:

Input: nums = [0,1,-2,-3,-4]
Output: 3
Explanation: The longest subarray with positive product is [1,-2,-3] which has a product of 6.
Notice that we cannot include 0 in the subarray since that'll make the product 0 which is not positive.
Example 3:

Input: nums = [-1,-2,-3,0,1]
Output: 2
Explanation: The longest subarray with positive product is [-1,-2] or [-2,-3].

Example 4:

Input: nums = [-1,2]
Output: 1

Example 5:

Input: nums = [1,2,3,5,-6,4,0,10]
Output: 4

 

Constraints:


Solution:

class Solution {
    public int getMaxLen(int[] nums) {
        int n = nums.length;
        int count = 0, max = 0;
        int l = 0, r = 0;
        while (r < n) {
            int temp = r;
            int curr = nums[r];
            if (curr < 0) {
                count ++;
            }
            if (count % 2 == 1 && (curr == 0 || r == n - 1)) {
                while (count % 2 == 1) {
                    int out = nums[l++];
                    if (out < 0) {
                        count --;
                    }
                }
            }
            while (l < n && nums[l] == 0) l ++;
            if (count % 2 == 0) {
                if (curr == 0) r --;
                // System.out.println("l: " + l + ", r: " + r);
                max = Math.max(max, r - l + 1);
            }
            if (curr == 0) {
                l = temp + 1;
            }
            r = temp + 1;
        }
        return max;
    }
}