Leetcode 152.乘机最大子序列
2024-08-30 17:24:38
乘积最大子序列
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
解题思路:乘法与加法最大差别在于,当前元素的符号具有全局性的作用。
如果当前元素为负,那么连乘到上个元素的最大乘积,再乘以当前元素,就变成负数,甚至可能成为最小乘积。
同样,连乘到上个元素的最小乘积如为负,再乘以当前元素,就变成正数,甚至可能成为最大乘积。
因此使用动态规划的方法:
记maxLast/minLast为连乘到上个元素的最大/小乘积
记maxCur/minCur为连乘到当前元素的最大/小乘积
记maxAll为全局最大乘积
class Solution{
public:
int maxProduct(vector<int>& nums){
if (nums.empty()){
return 0;
}
if (nums.size() == 1){
return nums[0];
}
int maxAll = nums[0];//global maximum
int maxLast = nums[0];//maximum including last element
int maxCur;//maximum including current element
int minLast = nums[0];//minumum including current element
int minCur;//minimum including last element
for (int i = 1; i<nums.size(); i++){
maxCur = max(nums[i], max(maxLast*nums[i], minLast*nums[i]));
minCur = min(nums[i], min(maxLast*nums[i], minLast*nums[i]));
maxLast = maxCur;
minLast = minCur;
maxAll = max(maxAll, maxCur);
}
return maxAll;
}
};
最新文章
- IOAPIC重定位中断处理函数思路整理
- Centos系统下Lamp环境的快速搭建
- mysql group by后 拼接某一字段
- 单例实现c++
- 【转】Linux重定向操作符
- 【BZOJ-3165】Segment 李超线段树(标记永久化)
- 屠蛟之路_重伤的屠蛟俊_ThirdDay
- 自动布局之autoresizingMask
- Authentication in .NET Web Api
- FireDac 与数据库连接时字符集及对应的字段类型问题
- MyEclipse中使用debug调试程序
- SQL语句新建表,同时添加主键、索引、约束
- 异步消息总线hornetq学习-03客户端连接hornet进行jms消息的收发-非jndi方式连接
- js原型和原型链个人理解(我的理解)
- NAT( 网络地址转换) 实现
- python test0729.py
- PHP编程效率的20个要点--PHP技术教程分享
- 如何缩放SpriteBuilder中的scene
- 解决jequry使用keydown无法跳转的问题
- Node.js的单元测试框架初体验
热门文章
- Hdu 3289 Rain on your Parade (二分图匹配 Hopcroft-Karp)
- _bzoj1192 [HNOI2006]鬼谷子的钱袋【水题】
- sqlserver 使用database mail 发送邮件
- JEECMS9.3集成dubbo操作记录
- java 字符串的比较compareTo
- Snort里如何将一个tcpdump格式的二进制文件读取打印到屏幕上(图文详解)
- AJPFX实列判断一个字符串是不是对称字符串
- CSS综合用法
- [Tunny]CSS LESS框架基础
- html中 accept 属性