【LeetCode热题100】152. 乘积最大子数组(动态规划)

一.题目要求

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续

子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

二.题目难度

中等

三.输入样例

示例 1:

输入: nums = 2,3,-2,4

输出: 6

解释: 子数组 2,3 有最大乘积 6。

示例 2:

输入: nums = -2,0,-1

输出: 0

解释: 结果不能为 2, 因为 -2,-1 不是子数组。

提示:

1 <= nums.length <= 2 * 104

-10 <= numsi <= 10

nums 的任何前缀或后缀的乘积都 保证 是一个 32- 位 整数

四.解题思路

特殊的不符合最优子结构的DP。做题思路和官解讲解的思路一样。

一个状态不够了 要两个状态
乘积最大子数组 - 力扣官方题解

五.代码实现

cpp 复制代码
class Solution {
public:
    int maxProduct(vector<int>& nums) {

        int preMax = nums[0];

        int preMin = nums[0];

        int ans = preMax;

        for(int i = 1; i < nums.size(); i++)
        {
            int tmpMax = preMax;
            int tmpMin = preMin;
            preMax = max(max(tmpMin* nums[i], tmpMax * nums[i]), nums[i]);
            preMin = min(min(tmpMin* nums[i], tmpMax * nums[i]), nums[i]);
            ans = max(preMax, ans);

            //cout<<preMax<<" "<<preMin<<" "<<ans<<endl;
        }
        return ans;
    }
};

六.题目总结

--

相关推荐
一切皆是因缘际会24 分钟前
资源的适配
大数据·人工智能·算法
鲸能云27 分钟前
【智慧能源】源储调售一体化架构与 EMS 滚动调度算法实践 —— 工商业光储收益提升 22% 的技术拆解
算法·架构·能源
双翌视觉35 分钟前
曝光调不对,算法全白费:机器视觉的曝光三态解析
人工智能·算法·计算机视觉
ysu_031444 分钟前
02-单链表完全指南
c语言·数据结构·算法·leetcode
生态学者1 小时前
香港理工大学Nature Communications:沿海塑料际古菌组特征及生态影响
大数据·人工智能·算法·r语言·微信公众平台
圣保罗的大教堂1 小时前
leetcode 3904. 最小稳定下标 II 中等
leetcode
ly-272531 小时前
IEEE PDF eXpress终稿检测踩坑记录:PDF图片字体未嵌入与LaTeX参考文献编译异常解决方法
服务器·人工智能·算法
代码不停1 小时前
子序列问题
java·算法
黎阳之光2 小时前
AI黑光相机|赋能低空全域感知,筑牢低空经济全天候视觉防线
人工智能·物联网·算法·安全·数字孪生
手写码匠2 小时前
华为云Flexus+DeepSeek征文|DeepSeek R1 推理优化实战:让复杂任务的回答又快又稳
人工智能·深度学习·算法·aigc