力扣 乘积最大子数组

动态规划,注意负负得正,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;
    }
}

动态规划题还是要多练。

相关推荐
azhou的代码园5 分钟前
基于RFM模型的中小型企业客户管理系统
java·人工智能·spring boot·毕业设计
君顾120 分钟前
酒吧点餐小程序系统开发实战:从架构设计到上线全流程指南
java·开发语言·酒吧
子非鱼a37 分钟前
【WEB】[SWPU2019]Web1
java·服务器·前端
花生了什么事o41 分钟前
自定义Spring Boot Starter全流程
java·spring boot·后端
en.en..1 小时前
Linux fork() 工作原理
数据结构·算法
地平线开发者1 小时前
bevformer算法模型详细解读
算法
torpidcat2 小时前
ruoyi-vue-pro 若依芋道 java springboot +mybatis 生日查询相关
java·vue.js·spring boot
liliangcsdn2 小时前
ICIR权重矩阵如何加权标准化为综合因子
算法
AC赳赳老秦2 小时前
文旅市场公开数据分析:基于 OpenClaw 采集景区客流与门票公示数据,生成区域文旅热度监测报告
java·c语言·python·php·symfony·deepseek·openclaw
SDWAN_Cheap2 小时前
SD-WAN智能选路技术的算法与实现机制
算法·php·sdwan