C++ 连续子数组的最大乘积

描述

输入一个长度为n的整型数组nums,数组中的一个或连续多个整数组成一个子数组。求所有子数组的乘积的最大值。

1.子数组是连续的,且最小长度为1,最大长度为n

2.长度为1的子数组,乘积视为其本身,比如4的乘积为4

3.该题的数据保证最大的乘积不会超过int的范围

数据范围: −100<=𝑎𝑖<=100−100<=ai<=100

示例1

输入:

复制代码
[3,2,-1,4]

返回值:

复制代码
6

说明:

复制代码
子数组[3,2]的乘积为6,[3,2,-1,4]的乘积为-24,[4]的乘积为4,故返回6
cpp 复制代码
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int maxProduct(vector<int>& nums) {
        // write code here
        if(nums.empty())
        {
            return 0;
        }

        int n = nums.size();   
        std::vector<int> dp_max(n, 0);
        std::vector<int> dp_min(n, 0);
     
        dp_max[0] = nums[0];
        dp_min[0] = nums[0];

        int res = nums[0]; 
        for(int i = 1; i < n; i++)
        {
            dp_max[i] = std::max(nums[i],  std::max(dp_max[i-1] * nums[i], dp_min[i-1]*nums[i]));
            dp_min[i] = std::min(nums[i], std::min(dp_max[i-1]*nums[i], dp_min[i-1]*nums[i]));

            res = std::max(res, dp_max[i]);
        }
        return res;
    }
};
相关推荐
启观川17 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸17 小时前
排序算法介绍
python·算法·排序算法
sm_9267870517 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
by2099917 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
colinu18 小时前
C++ 异步任务与线程生命周期:`std::async`、`future`、`thread`、`jthread` 与协作式退出
java·jvm·c++
动词ing18 小时前
【题目练习】算法 组合总和||
算法
wuminyu18 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
longlongzihan19 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
专业程序开发源19 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
liulilittle19 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c