力扣 乘积最大子数组

动态规划,注意负负得正,dp交换。

题目

注意这里的dp的乘积要求最大,而两个很大的负数相乘也是大的,因此在每遍历到一个数时要存一个最大值的dp与一个最小值的dp,然后遍历完后再去存ans的dp。由于存在负数,那么会导致最大的变最小的,最小的变最大的。因此还需要维护当前最小值。

时间复杂度: O(n),空间复杂度: O(1)。

java 复制代码
class Solution {
    public int maxProduct(int[] nums) {
        int ans = Integer.MIN_VALUE, imax = 1, imin = 1;
        for(int i=0; i<nums.length; i++){
            if(nums[i] < 0){ 
         // 负数交换,这样每次循环后,imax最大,imin最小
              int tmp = imax;
              imax = imin;
              imin = tmp;
            }
            imax = Math.max(imax*nums[i], nums[i]);//维护大的

            imin = Math.min(imin*nums[i], nums[i]);//维护小的
            
            ans = Math.max(ans, imax);
        }
        return ans;
    }
}

动态规划题还是要多练。

相关推荐
wfeqhfxz25887825 小时前
YOLO13-C3k2-GhostDynamicConv烟雾检测算法实现与优化
人工智能·算法·计算机视觉
芝士爱知识a5 小时前
2026年AI面试软件推荐
人工智能·面试·职场和发展·大模型·ai教育·考公·智蛙面试
毕设源码-朱学姐5 小时前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
Aaron15885 小时前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理
觅特科技-互站6 小时前
陌讯视觉‘动态密度流’模型:亚运场馆到前海政务厅,98.6%聚众事件5秒精准定位|技术拆解+SDK实录
逻辑回归·动态规划
石去皿6 小时前
大模型面试通关指南:28道高频考题深度解析与实战要点
人工智能·python·面试·职场和发展
C雨后彩虹7 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
程序员辣条7 小时前
AI产品经理:2024年职场发展的新机遇
人工智能·学习·职场和发展·产品经理·大模型学习·大模型入门·大模型教程
AI大模型测试7 小时前
大龄程序员想转行到AI大模型,好转吗?
人工智能·深度学习·机器学习·ai·语言模型·职场和发展·大模型
美团程序员7 小时前
80道经典常见测试面试题
软件测试·面试·职场和发展·软件测试面试