152. 乘积最大子序列

给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。

示例 1:

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

代码

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int res = nums[0], n = nums.size();
        vector<int> f(n, 0), g(n, 0);
        f[0] = nums[0];
        g[0] = nums[0];
        for (int i = 1; i < n; ++i) {
            f[i] = max(max(f[i - 1] * nums[i], g[i - 1] * nums[i]), nums[i]);
            g[i] = min(min(f[i - 1] * nums[i], g[i - 1] * nums[i]), nums[i]);
            res = max(res, f[i]);
        }
        return res;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 来源:NumPy Tutorial - TutorialsPoint 译者:飞龙 协议:CC BY-NC-SA 4...
    布客飞龙阅读 33,358评论 6 98
  • 线性表中的双指针法是指通过两个指针(游标)来指示线性表中的元素的方法。双指针的使用本身并没有什么神奇之处,但是通过...
    Like_eb56阅读 3,499评论 0 0
  • 第二季 这一季,博士重生了,第十任博士,据说是DW有史以来最养眼也似乎是最受欢迎的博士,欢呼。(但我会一直一直记得...
    青铮的Fantasy笔记簿阅读 8,378评论 3 8
  • 场景:在设备中需要对网络状态进行监听,当网络状态改变时,要发送指令到单片机程序中第一步,定义推送广播的PushAc...
    小声音大世界阅读 3,663评论 0 0
  • 今天由张媛同学给我们开讲 - 能力 智力 智力的内涵是多元的,智力的多面性 内省智力 空间智力 交际智力 还...
    老酒馆的猫M阅读 2,490评论 0 0

友情链接更多精彩内容