152. Maximum Product Subarray
2015-08-25 09:09
295 查看
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array
the contiguous subarray
思路:
Maximum Subarray那题的变种。由于正负得负,负负得正的关系。以A[i]结尾的max product subarray同时取决于以A[i-1]结尾的max / min product subarray以及A[i]本身。因此,对每个i,需要记录min/max product两个状态:
max_product[i] = max(max_product[i-1]*A[i], min_product[i-1]*A[i], A[i])
min_product[i] = min(max_product[i-1]*A[i], min_product[i-1]*A[i], A[i])
For example, given the array
[2,3,-2,4],
the contiguous subarray
[2,3]has the largest product =
6.
思路:
Maximum Subarray那题的变种。由于正负得负,负负得正的关系。以A[i]结尾的max product subarray同时取决于以A[i-1]结尾的max / min product subarray以及A[i]本身。因此,对每个i,需要记录min/max product两个状态:
max_product[i] = max(max_product[i-1]*A[i], min_product[i-1]*A[i], A[i])
min_product[i] = min(max_product[i-1]*A[i], min_product[i-1]*A[i], A[i])
class Solution { public: int maxProduct(int A[], int n) { if(n<=0) return 0; int ret, curMax, curMin; ret = curMax = curMin = A[0]; for(int i=1; i<n; i++) { int temp = curMax; //注意这里要保存curMax原来的值,因为下面一行代码将会改变curMax curMax = max(max(curMax*A[i], curMin*A[i]),A[i]); curMin = min(min(temp*A[i], curMin*A[i]),A[i]); ret = max(ret, curMax); } return ret; } };
相关文章推荐
- 理解ECMAScript的几个关键语句
- c#中的delegate(委托)和event(事件)
- C++中的常量定义小结
- 解开Android应用程序组件Activity的"singleTask"之谜
- Android 网络通信框架Volley简介
- 日经社説 20150825 年金機構と厚労省は責任感と緊張感を
- c++ 头文件中定义函数的优缺点
- 自动收集awr报告
- 前端学习笔记
- Python集合(set)类型的操作
- dev view 列名称居中
- easyui datagrid 批量编辑和提交
- ETL kettle 自学总结
- 数据仓库建模:浅析一致性维度
- eclipse导入一个项目之后没有JRE System Library怎么办?
- mysql安装图解 mysql图文安装教程(详细说明)
- SSi框架整合
- 【编程之美】寻找数组中的最大值和最小值
- 源码推荐(8.25):简单易用的Toast,实现水位波浪动画
- HDU 5288 OO’s Sequence (2015 MUT#1 数学+质因子分解)