---
# System prepended metadata

title: Leetcode 1567. Maximum Length of Subarray With Positive Product
tags: [Leetcode(C++)]

---

# Leetcode 1567. Maximum Length of Subarray With Positive Product
###### tags: `Leetcode(C++)`

題目 : https://leetcode.com/problems/maximum-length-of-subarray-with-positive-product/submissions/ 。

想法 : 

    跟上一題類似，主要的差別在於要記錄現在有幾個負數，當遇到0或是遇到結尾就計算相乘後為正數的最大長度。
    寫完本題之後，覺得從尾巴再算到頭去當作分辨奇數個負號的方法真的太鬼了。

時間複雜度 : O(n)。

程式碼 :

```
class Solution {
public:
    int getMaxLen(vector<int>& nums) {
        int l = nums.size(), Maxl=0, fr = 0, cnt=0;
           
        for(int i=0 ; i<l ; i++){
            if(nums[i] == 0){
                fr = i+1;
                cnt = 0;
                continue;
            }
            
            if(nums[i] < 0){
                cnt++;
            }
            
            if(cnt % 2 == 0){
                //cout << i << " " << fr << endl;
                Maxl=max(Maxl , i-fr+1);
            }
        }
        
        fr=l-1; cnt=0;
        for(int i=l-1 ; i>=0 ; i--){
            if(nums[i] == 0){
                fr = i-1;
                cnt = 0;
                continue;
            }
            
            if(nums[i] < 0){
                cnt++;
            }
            
            if(cnt % 2 == 0){
                //cout << i << " " << fr << endl;
                Maxl=max(Maxl , fr-i+1);
            }
        }
        
        return Maxl;
    }
};
```