描述
给定一个长度为 $n$ 的整数数组,请你找出其中最长的乘积为正数的子数组长度。子数组的定义是原数组中一定长度的连续数字组成的数组。

数据范围:
$1≤n≤10^5$, 数组中的元素满足 $∣val∣≤10^9$

输入描述:
第一行输入一个正整数 $n$ ,表示数组长度。
第二行输入 $n$ 个整数,表示数组中的元素。

输出描述:
输出最长的乘积为正数的子数组长度

示例1
输入:

5
1 2 3 -5 1

输出:

3

示例2
输入:

5
1 2 3 0 5

输出:

3

题解

#include<iostream>
using namespace std;
const int N = 1e5+10;
int a[N];
int n;

int maxLength() {
    int res = 0, tmp;
    int pos = a[0] > 0 ? 1 : 0;
    int neg = a[0] < 0 ? 1 : 0;
    
    for(int i = 1; i < n; i++) {
        if(a[i] > 0) {
            pos++;
            neg = neg > 0 ? neg+1 : 0;
        }else if(a[i] < 0) {
            tmp = neg > 0 ? neg + 1 : 0;
            neg = pos + 1;
            pos = tmp;
        }else {
            pos = 0;
            neg = 0;
        }
        res = max(res, pos);
    }
    return res;
}

int main() {
    cin >> n;
    for(int i = 0; i < n; i++) cin >> a[i];
    cout << maxLength() << endl;
    return 0;
}

Last modification:April 2, 2022
如果觉得我的文章对你有用,请随意赞赏