题解 | #乘积为正数的最长连续子数组//太绕了
乘积为正数的最长连续子数组
https://www.nowcoder.com/practice/0112b9b5a09048d89309f55ea666db91
#include <iostream> using namespace std; int main() { int n; while (cin >> n) { // 注意 while 处理多个 case //同时保存最长负值数组与最长正值数组长度,分别为nl,pl; int nl = 0, pl = 0, maxl = 1; for (int i = 0; i < n; i++) { long long t; scanf("%lld", &t); if (t > 0) { pl++; //正数的长度 + 1 if (nl != 0) { //如果负数的长度不为0, 那么也 + 1 nl++; } } else if (t < 0) { //正数变负数,负数变正数 int k = nl; nl = pl + 1; //负数的长度为正数长度 + 1 if(k != 0){ //正数的长度为原本负数的长度 + 1, 如果原本负数有长度的话 pl = k + 1; }else{ //没有则为0 pl = 0; } } else { //t == 0 //清空nl和pl nl = 0; pl = 0; } maxl = max(pl, maxl); } printf("%d\n", maxl); } } // 64 位输出请用 printf("%lld")