面试算法-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;
    }
}
相关推荐
醒过来摸鱼5 小时前
9.11 傅里叶变换家族介绍
线性代数·算法·概率论
米兰小铁匠176 小时前
js深入之从原型到原型链
javascript·面试
是苏浙6 小时前
2025年11月17日力扣刷题小记
算法·刷题
@卞6 小时前
ST 表相关练习题
数据结构·c++·算法
醒过来摸鱼6 小时前
9.8 贝塞尔曲线
线性代数·算法·numpy
2501_941111526 小时前
C++中的适配器模式
开发语言·c++·算法
2501_941111946 小时前
C++中的适配器模式变体
开发语言·c++·算法
Ace_31750887766 小时前
拼多多关键字搜索接口逆向:从 WebSocket 实时推送解析到商品数据结构化重建
数据结构·websocket·网络协议
旋转的马铃薯干7 小时前
bulk RNA-Seq(7)差异表达分析可视化
算法
旋转的马铃薯干7 小时前
bulk RNA-Seq(8)富集分析
算法