题解 | #乘积为正数的最长连续子数组//太绕了

乘积为正数的最长连续子数组

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")

全部评论

相关推荐

昨天 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
我是小红是我:学校换成中南
点赞 评论 收藏
分享
11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务