描述
给定一个长度为 $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;
}