刷leetcode hot100--动态规划3.12

第一题乘积max子数组1h++

emmmm感觉看不懂题解

线性dp【计划学一下acwing,挨个做一下】

线性动态规划 相似题解析 最长上升子序列 最大上升子序列和 最大连续子段和 乘积最大子数组_哔哩哔哩_bilibili

比较奇怪的就是有正负数和0,如何处理?

核心是维护一个max和min

//全是整数【负数,0,正数】,乘积max,连续子数组

//暴力求解??起始i,终止j,遍历

//dpn以numsn结束的连续子数组的max乘积

//初始化dpn = numsn

//有负数怎么办??,或者说其实是整数的话,只用关注0,负数

//负数和0如何处理

//负数和0分开处理,负数看奇数偶数,0分左右两边/就是0

//看了评论区,两个能合起来:负数偶数【不用管,遍历取max】,

//首先不用管0,因为int a = 1,int max = nums0,如果遇到0,a = 1即可

//负数:负数奇数【若无0,则为左边数组,右边数组取max】,有0,分成两半,看左边负数个数,右边负数个数,依旧是无0的操作

//一个很厉害的方法是从左向右和从右向左遍历一次,负数??取max

//dp想法是维护min和max

题解:

复制代码
class Solution {
public:
    int maxProduct(vector<int>& nums) {
        long maxF = nums[0], minF = nums[0], ans = nums[0];
        for (int i = 1; i < nums.size(); ++i) {
            long mx = maxF, mn = minF;
            maxF = max(mx * nums[i], max((long)nums[i], mn * nums[i]));
            minF = min(mn * nums[i], min((long)nums[i], mx * nums[i]));
            if(minF<INT_MIN) {
                minF=nums[i];
            }
            ans = max(maxF, ans);
        }
        return ans;
    }
};
相关推荐
2601_962297485 分钟前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作
辰烨chenye21 分钟前
LeetCode Hot 100 题解 · 子串篇
算法·leetcode·职场和发展
辰烨chenye34 分钟前
LeetCode Hot 100 题解 · 堆篇
java·算法·leetcode
手写码匠37 分钟前
华为云Flexus+DeepSeek征文|DeepSeek 应用监控告警体系实战:从“用户投诉才知道“到“故障前就发现“
人工智能·深度学习·算法·aigc
shehuiyuelaiyuehao1 小时前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法
智购科技自动售货机厂家1 小时前
2026自动售货机设备清洁效果自动验证:从图像比对到评分算法的工程实践~YH
人工智能·算法·计算机视觉
姜穆澜2 小时前
机器学习实战指南:从算法原理到工程落地
人工智能·算法·机器学习
Q一件事3 小时前
RWEQ——保留与消去P的soil_loss联合推导
算法
HugoStudio_SWAN3 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪