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.
思路:这个算法是目前为止最清晰的;
- If we see a 0, we gotta start off things again
- If we see a positive number :
2.1. Increase length of positive mutilpicative result till now.
2.2. Increase length of negative mutilpicative result till now, unless we had not encountered any negative before. - If we see a negative number:
3.1. It's time to swap positive and negative multiplicative results' lengths and do similar task as we did in above case. - In each iteration, use the length of positive mutilpicative result to compute answer.
class Solution {
public int getMaxLen(int[] nums) {
if(nums == null || nums.length == 0) {
return 0;
}
int positive = 0; int negative = 0;
int res = 0;
for(int num: nums) {
if(num == 0) {
positive = 0;
negative = 0;
} else if(num > 0) {
positive++;
negative = negative == 0 ? 0 : negative+1;
} else {
// num < 0;
int temp = positive;
positive = negative == 0 ? 0 : negative + 1;
negative = temp + 1;
}
res = Math.max(res, positive);
}
return res;
}
}