子数组的最大乘积 子数组最大和
来源:互联网 发布:乐普数据乐宝宝下载 编辑:程序博客网 时间:2024/05/03 15:29
问题描述:
给定一个长度为N的整数数组,求子数组的最大乘积。
分析:
同理可以求子数组最大和
还有子数组最大乘积,都是动态规划的简单应用,适合初学者,大神可以直接忽略。
给定一个长度为N的整数数组,求子数组的最大乘积。
分析:
例如: int a[12]={1,2,-1,3,4,5,-2,6,4,8,-3};子数组的最大乘积,要求时间在O(n)内完成,这里用动态规划的思想来解决,因为这个问题具有 后无效性,即当前子数组的最大乘积与后边的无关,我们可以用Tail[]数组来存储当前子数组的最大乘积,那么Tail[i]=max(Tail[i-1]*a[i],a[i]);大家可以仔细思考下,然后再取Tail中最大的值即可。
//子数组的最大乘积#include<iostream>using namespace std;int qmax(int x,int y){return x>y?x:y;} int main(){int a[12]={1,2,-1,3,4,5,-2,6,4,8,-3},i,j;int tail[12];tail[0]=a[0];int maxnum=a[0]; for(i=1;i<12;i++){tail[i]=qmax(a[i],tail[i-1]*a[i]);if(maxnum<tail[i]) maxnum=tail[i];} cout<<maxnum<<endl;return 0;}
同理可以求子数组最大和
#include<iostream>using namespace std;int qmax(int x,int y){return x>y?x:y;} int main(){int a[12]={1,2,-1,3,4,5,-2,6,4,8,-3},i,j;int tail[12];tail[0]=a[0];int maxnum=a[0]; for(i=1;i<12;i++){tail[i]=qmax(a[i],tail[i-1]+a[i]);if(maxnum<tail[i]) maxnum=tail[i];} cout<<maxnum<<endl;return 0;}
还有子数组最大乘积,都是动态规划的简单应用,适合初学者,大神可以直接忽略。
//子数组最长递增子序列#include<iostream>using namespace std;int main(){int a[9]={1,-1,2,-3,4,-5,6,-7},i,j;int tail[9];int maxnum=1;for(i=0;i<8;i++){tail[i]=1;for(j=0;j<i;j++){if(a[j]<a[i]){tail[j]=tail[j]+1;}}}for(i=0;i<8;i++) if(maxnum<tail[i]) maxnum=tail[i]; cout<<maxnum<<endl;return 0;}
0 0
- 子数组的最大乘积 子数组最大和
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- B - An easy problem
- Kaldi .cc文件的命令行解析
- HDU 4749 Parade Show(KMP)
- 设计模式之工厂模式
- 管理经济学之颗粒归仓(二)
- 子数组的最大乘积 子数组最大和
- 如何在oracle 集群中更换私有网络的网卡
- UVa11269 - Setting Problems
- (libgdx学习)libgdx中的JSON应用
- Button扩展累CButtonST修改字体、背景色和背景图片
- CatmullRom插值算法
- android开发给linearlayout设置边框
- Linux用户进程内存空间
- HDU 3466 Proud Merchants