面试算法-104-乘积最大子数组

题目

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

子数组

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

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

示例 1:

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

输出: 6

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

java 复制代码
class Solution {
    public int maxProduct(int[] nums) {
        int n = nums.length;
        int[][] dp = new int[n][2];

        dp[0][0] = nums[0];
        dp[0][1] = nums[0];
        int max = nums[0];
        for (int i = 1; i < n; i++) {
            if (nums[i] > 0) {
                dp[i][0] = Math.max(nums[i], dp[i - 1][0] * nums[i]);
                dp[i][1] = Math.min(nums[i], dp[i - 1][1] * nums[i]);
            } else {
                dp[i][0] = Math.max(nums[i], dp[i - 1][1] * nums[i]);
                dp[i][1] = Math.min(nums[i], dp[i - 1][0] * nums[i]);
            }
            max = Math.max(max, dp[i][0]);
        }
        return max;
    }
}
相关推荐
陈增林14 分钟前
基于 PyQt5 的多算法视频关键帧提取工具
开发语言·qt·算法
编程岁月30 分钟前
java面试-0141-java反射?优缺点?场景?原理?Class.forName和ClassLoader区别?
java·开发语言·面试
C嘎嘎嵌入式开发2 小时前
【机器学习算法篇】K-近邻算法
算法·机器学习·近邻算法
小L~~~2 小时前
2025吉比特-游戏引擎开发-一面复盘
数据结构·算法·游戏引擎
程序猿Eason3 小时前
U587038 背包 题解
c++·算法·动态规划
potato_may3 小时前
第18讲:C语言内存函数
c语言·数据结构·算法
沐怡旸3 小时前
【底层机制】【Android】Binder架构与原理
android·面试
crystal_pin3 小时前
wangEditor与kityFormula集成解决思路
面试
007php0073 小时前
Docker 实战经验之关键文件误删恢复指南(一)
jvm·docker·云原生·容器·面试·职场和发展·eureka