力扣_动态规划2—乘积最大的子数组

题目

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

对比:“力扣_数组19—最大子数组和”

方法—动态规划

  • 类似“力扣_数组19—最大子数组和”的方法
    • 以第 i i i 个元素结尾的子数组的最大乘积 f ( i ) = m a x ( f ( i − 1 ) ∗ n u m s [ i ] , n u m s [ i ] ) f(i)=max(f(i-1)*nums[i], nums[i]) f(i)=max(f(i1)nums[i],nums[i])
    • 但这样是不对的,假如 f ( i − 2 ) f(i-2) f(i2) 为负, n u m s [ i ] nums[i] nums[i] 为负, n u m s [ i − 1 ] nums[i-1] nums[i1] 为正,这种情况下得到的 f ( i ) = n u m s [ i ] f(i)=nums[i] f(i)=nums[i],但应该为 f ( i ) = f ( i − 2 ) ∗ n u m s [ i − 1 ] ∗ n u m s [ i ] f(i)=f(i-2)*nums[i-1]*nums[i] f(i)=f(i2)nums[i1]nums[i]
  • 改进
    • n u m s [ i ] nums[i] nums[i] 为负,则 f m a x ( i ) = m a x ( f m i n ( i − 1 ) ∗ n u m s [ i ] , n u m s [ i ] ) f_{max}(i)=max(f_{min}(i-1)*nums[i], nums[i]) fmax(i)=max(fmin(i1)nums[i],nums[i])
    • n u m s [ i ] nums[i] nums[i] 为正,则 f m a x ( i ) = m a x ( f m a x ( i − 1 ) ∗ n u m s [ i ] , n u m s [ i ] ) f_{max}(i)=max(f_{max}(i-1)*nums[i], nums[i]) fmax(i)=max(fmax(i1)nums[i],nums[i])
    • 综上, f m a x ( i ) = m a x ( f m a x ( i − 1 ) ∗ n u m s [ i ] , f m i n ( i − 1 ) ∗ n u m s [ i ] , n u m s [ i ] ) f_{max}(i)=max(f_{max}(i-1)*nums[i], f_{min}(i-1)*nums[i], nums[i]) fmax(i)=max(fmax(i1)nums[i],fmin(i1)nums[i],nums[i])
    • 因此,每次循环需要更新 f m a x , f m i n f_{max}, f_{min} fmax,fmin

代码

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int n = nums.size();
        int dp_max = nums[0];
        int dp_min = nums[0];
        int ret = nums[0];
        for(int i = 1; i < n; i++){
            int temp_max = dp_max;
            int temp_min = dp_min;
            dp_max = max(nums[i], max(temp_max*nums[i], temp_min*nums[i]));
            dp_min = min(nums[i], min(temp_max*nums[i], temp_min*nums[i]));
            ret = max(ret, dp_max);
        }
        return ret;
    }
};

相关推荐

  1. _动态规划2乘积数组

    2024-03-15 15:32:05       46 阅读
  2. leetcode热题100.乘积数组动态规划进阶)

    2024-03-15 15:32:05       30 阅读
  3. 题解(乘积数组)

    2024-03-15 15:32:05       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 15:32:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 15:32:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 15:32:05       87 阅读
  4. Python语言-面向对象

    2024-03-15 15:32:05       96 阅读

热门阅读

  1. TextView 中实现打印效果并且可以换行

    2024-03-15 15:32:05       45 阅读
  2. leetcode257.二叉树的所有路径

    2024-03-15 15:32:05       42 阅读
  3. 【25届秋招备战C++】算法篇-贪心算法(Greedy)

    2024-03-15 15:32:05       48 阅读
  4. 八数码(A*算法)+单词接龙(DFS)

    2024-03-15 15:32:05       42 阅读
  5. Go语言中的面向对象编程(OOP)

    2024-03-15 15:32:05       49 阅读
  6. Nginx:配置拦截/禁用ip地址

    2024-03-15 15:32:05       44 阅读
  7. 【Mysql事务】

    2024-03-15 15:32:05       40 阅读
  8. React Fiber的原理

    2024-03-15 15:32:05       42 阅读
  9. 人工智能在现代科技中的应用和未来发展趋势

    2024-03-15 15:32:05       44 阅读
  10. jeesite集成redis,redis工具类

    2024-03-15 15:32:05       33 阅读