题解 | #连续子数组的最大乘积#

连续子数组的最大乘积

https://www.nowcoder.com/practice/fd8c819c07c9493887bfac8549c119f4

考虑负负得正情况

比如 -6 * -4 = 24 -2 * -4 = 8 所以也要取min

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

const int N = 2 * 100010;
int f[N], g[N];

int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; i ++){
        cin >> a[i];
        f[i] = a[i];
        g[i] = a[i];
    }
    int res = a[0];

    for(int i = 1; i < n; i ++){
        f[i] = max(g[i - 1] * a[i], max(f[i - 1] * a[i], f[i]));
        g[i] = min(f[i - 1] * a[i], min(g[i - 1] * a[i], g[i]));
        res = max(res, f[i]);
    }
    cout << res;
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
11-11 14:21
西京学院 C++
无敌混子大王:首先一点,不管学校层次怎么样,教育经历放在第一页靠上位置,第一页看不到教育经历,hr基本直接扔掉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务