题解 | #乘积为正数的最长连续子数组#
乘积为正数的最长连续子数组
https://www.nowcoder.com/practice/0112b9b5a09048d89309f55ea666db91
#include <iostream> #include <algorithm> using namespace std; const int N = 1e5 + 10; int dp1[N], dp2[N]; // dp1[]连续乘积为正的最大长度,dp2[]连续乘积为负的最大长度 //连续乘积为正,同时考虑当前元素为正和为负的情况 int main() { int n, ans = 0; cin >> n; dp1[0] = dp2[0] = 0; for(int i = 1; i <= n; i ++) { int a; cin >> a; if(a == 0) dp1[i] = dp2[i] = 0; else if(a > 0) { dp1[i] = dp1[i - 1] + 1; if(dp2[i - 1]) dp2[i] = dp2[i - 1] + 1; } else { dp2[i] = dp1[i - 1] + 1; if(dp2[i - 1]) dp1[i] = dp2[i - 1] + 1; } ans = max(dp1[i], ans); } cout << ans; } // 64 位输出请用 printf("%lld")