最大子数组乘积算法
来源:互联网 发布:九浅一深网络剧百度云 编辑:程序博客网 时间:2024/06/09 17:05
给出一数组a,求最大子数组乘积
算法思路:用动态垃规划.用maxValue(n)表示从0到n的最大子数组乘积,minValue(n)表示从0到n的最小子数组乘积。
状态转移方程为:
minValue(n)= min{minValue(n-1)*a[n], maxValue(n-1)*a[n], a[n]}
maxValue(n)=max{minValue(n-1)*a[n], maxValue(n-1)*a[n], a[n]}
在求取最大子数组乘积时,更新最大值结果。
代码如下:
class Solution{public: int maxProduct(vector<int>& nums) { int minValue = 1, maxValue = 1, result = numeric_limits<int>::min(); int len = nums.size(); for (int i = 0; i < len; i++) { int tempMin = min(maxValue * nums[i], min(minValue * nums[i], nums[i])); int tempMax = max(maxValue * nums[i], max(minValue * nums[i], nums[i])); minValue = tempMin; maxValue = tempMax; result = max(result, maxValue); } return result; }};以数组[2,3,-2,4]为例,输出结果为6
验证代码为:
#include <iostream>#include <algorithm>#include <vector>#include <limits>using namespace std;int main(){ int a[4] = {2, 3, -2, 4}; vector<int> nums(a, a + 4); Solution solver; int res = solver.maxProduct(nums); cout << res << endl; return 0;}
0 0
- 最大子数组乘积算法
- 【算法拾遗】子数组的最大乘积
- 子数组最大乘积
- 最大子数组乘积
- 最大乘积子数组
- 最大子数组乘积
- 子数组最大乘积
- 子数组最大乘积
- 最大乘积子数组
- 子数组最大乘积
- 最大子数组乘积
- 经典算法——连续子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 2.13子数组最大乘积
- u-boot2010.06的移植(1)——准备移植
- Android:使用fragment(碎片)—让你的应用更灵活(一)简单运用
- 加载上传图片,获取文件名、文件路径并保存到程序的文件夹中
- 数据结构 - 内存
- 漫谈C指针第五讲---声明指针常量
- 最大子数组乘积算法
- postgresql 可调试
- 国内一些热门的在线教育网站
- Git 命令及工具
- cocos2d中的屏幕坐标系和OPenGL坐标系转换
- ASP网页中的Base64加密、解密函数代码
- 为什么样本方差(sample variance)的分母是 n-1?
- OCiOS开发:绘图与曲线
- Unique Paths