[C++]最大连续子序列乘积
问题描述
给定一个整数序列(可能有正数,0和负数),求它的一个最大连续子序列乘积。比如给定数组a={3, -4, -5, 6, -2},则最大连续子序列乘积为720,即3*(-4)*(-5)*6=720.
分析
求最大连续子序列乘积与最大连续子序列和问题有所不同,因为其中有正有负还有可能有0.
假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max[i]来表示以a[i]结尾的最大连续子序列的乘积值,用Min[i]表示以a[i]结尾的最小的连续子序列的乘积值,那么状态转移方程为:
Max[i]=max{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
Min[i]=min{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
初始状态为Max[0]=Min[0]=a[0].代码如下:
#include"iostream"
using namespace std;
int max3(int a,int b,int c)
{
int t = a>b?a:b;
return t>c?t:c;
}
int min3(int a,int b,int c)
{
int t = a<b?a:b;
return t<c?t:c;
}
int max_multiple(int *a,int n)
{
int *Min = new int[n]();
int *Max = new int[n]();
Min[0]= Max[0] = a[0];
int max = Max[0];
for(int i=1; i<n; i++){
Max[i] = max3(Max[i-1]*a[i],Min[i-1]*a[i],a[i]); //求三个数中最大值
Min[i] = min3(Max[i-1]*a[i],Min[i-1]*a[i],a[i]); //求三个数中最小值
if(max < Max[i])
max = Max[i];
}
//内存释放
delete [] Max;
delete [] Min;
return max;
}
//不保存中间变量的实现方法
int max_multiple_2(int *a,int n)
{
int minsofar, maxsofar, max;
max = minsofar = maxsofar = a[0];
for(int i=1;i<n;i++){
int maxhere = max3(maxsofar*a[i], minsofar*a[i], a[i]);
int minhere = min3(maxsofar*a[i], minsofar*a[i], a[i]);
maxsofar = maxhere;
minsofar = minhere;
if(max < maxsofar)
max = maxsofar;
}
return max;
}
int main()
{
int a[]={3, -4, 0, 6, -2};
cout《max_multiple_2(a,5)《endl;
system("pause");
return 0;
}
转载于:https://www.cnblogs.com/52bokeyuan1314/p/3356782.html
[C++]最大连续子序列乘积相关推荐
- 最大连续子序列乘积(DP)
题目来源:小米手机2013年校园招聘笔试题题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含多个测试样例. 每个测试样例的第一行仅包含正整数 ...
- 最大子序列求和_连续子序列最大和与乘积问题的分析
问题描述 给定(可能是负的)整数序列A1, A2,...,AN, 寻找(并标识)使Sum(Ak)(k >=i, k <= j)的值最大的序列.如果所有的整数都是负的,那么连续子序列的最大和 ...
- HDU 1231 最大连续子序列
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 最大连续子序列(dp)
Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...
- 最大连续子序列和-动态规划
题目描述: 给定K个整数的序列{ N1, N2, -, NK },其任意连续子序列可表示为{ Ni, Ni+1, -, Nj },其中 1 <= i <= j <= K.最大连续子序 ...
- [数字技巧]最大连续子序列和
最大连续子序列和这个问题是一个比较常见的问题,出现在很多公司的面试笔试中.题目大概是这样描述的: 输入一个整形数组,数组中有正数也有负数,数组中连续一个或多个组成一个子序列,每个子序列都有一个和,求所 ...
- 四种方法解决最大连续子序列和问题
四种方法解决最大连续子序列和问题 参考文章: (1)四种方法解决最大连续子序列和问题 (2)https://www.cnblogs.com/AlvinZH/p/6795647.html 备忘一下.
- 九度OJ 1011:最大连续子序列 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5615 解决:2668 题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...
- 最小正连续子序列和 问题
2019独角兽企业重金招聘Python工程师标准>>> 给你一个数组a[1...n],求最小正连续子序列和 这个问题不能用dp解,因为不具有最优子结构.只能尝试其他方法. 常用定义, ...
- HDU 1231 最大连续子序列:水dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 题意: 给你一个整数序列,求连续子序列元素之和最大,并输出该序列的首尾元素(若不唯一,输出首坐标 ...
最新文章
- 嵌入式Linux的OTA更新,基础知识和实现
- sql SET DATEFORMAT对日期处理的影响
- minio分布式搭建_分布式存储Minio集群环境搭建
- 【kibana】kibana node 监控指标 详解
- python接口自动化(六)--发送get请求接口(详解)
- 记一次获得 3 倍性能的 go 程序优化实践,及 on-cpu / off-cpu 火焰图的使用
- 疫情,降薪,跳槽工作难找,任务重加班多,程序员的出路在何方?
- 1019. General Palindromic Number (20)
- axios发post请求,后端接收不到参数的问题
- elementui表格列宽自适应_Java 操作Word表格——创建嵌套表格、添加复制表格行或列...
- 自定义getElementByClass
- app抓包工具_【旧版IPA抓包教程2】超便捷苹果旧版本APP抓包/轻松抓取你想要的版本,旧版app任意下载...
- python语言磁力搜索引擎源码公开,基于DHT协议
- php mysql 连接池_php 如何实现 数据库 连接池
- android捕获按键广播,Android 解决监听home键的几种方法
- uniapp 前端获取历史搜索记录
- RCLAMP0524P超低电容TVS二极管阵列,DFN-10L封装
- Marvell 88E1111 百兆工程 (FPGA)
- SpringCloud整合Sa-Token登录认证+Gateway网关拦截
- 最近瞎忙,比较懒撒,所以要收收心,该学习的学习。