最大子序列乘积
来源:互联网 发布:淘宝上门取件在哪里 编辑:程序博客网 时间:2024/06/04 23:28
#include<stdio.h>
//最大子序列乘积
int maxNum(int a,int b,int c){
int max=a;
if(b>max){
max=b;
}
if(c>max){
max=c;
}
return max;
}
int minNum(int a,int b,int c){
int min=a;
if(min>b){
min=b;
}
if(min>c){
min=c;
}
return min;
}
//解法二 获取所有以i为结尾的最大子序列乘积,取出最大的 O(n)
void getMaxAcc2(int a[],int len){
//max[i]是以a[i]为结尾的最大子序列乘积
//min[i]是以a[i]为结尾的最小子序列乘积
int max[len];
int min[len];
int maxAcc=a[0];
max[0]=a[0];
min[0]=a[0];
for(int i=1;i<len;i++){
//以i为结尾的乘积最大有3种情况,1.a[i]为正,则最大为max[i-1]*a[i]
//2.a[i]为负,若min[i-1]为负,则最大为min[i-1]*a[i]
//3/若min[i-1]为正,则最大为a[i] 最小乘积同理
max[i]=maxNum(max[i-1]*a[i],min[i-1]*a[i],a[i]);
min[i]=minNum(min[i-1]*a[i],max[i-1]*a[i],a[i]);
printf("%d ",max[i]);
if(maxAcc<max[i]){
maxAcc=max[i];
}
}
printf("最大的子序列乘积为:%d",maxAcc);
}
//解法一 遍历所有 O(n^2)
void getMaxAcc(int a[],int len){
int maxAcc=0;
for(int i=0;i<len;i++){
int result=1;
for(int j=i;j<len;j++){
result*=a[j];
if(result>maxAcc){
maxAcc=result;
//printf("最大子序列和为:%d\n",maxAcc);
}
}
}
printf("最大子序列和为:%d",maxAcc);
}
int main(){
int test[]={-2,11,-4,13,-5,-2};
getMaxAcc2(test,sizeof(test)/sizeof(int));
}
//最大子序列乘积
int maxNum(int a,int b,int c){
int max=a;
if(b>max){
max=b;
}
if(c>max){
max=c;
}
return max;
}
int minNum(int a,int b,int c){
int min=a;
if(min>b){
min=b;
}
if(min>c){
min=c;
}
return min;
}
//解法二 获取所有以i为结尾的最大子序列乘积,取出最大的 O(n)
void getMaxAcc2(int a[],int len){
//max[i]是以a[i]为结尾的最大子序列乘积
//min[i]是以a[i]为结尾的最小子序列乘积
int max[len];
int min[len];
int maxAcc=a[0];
max[0]=a[0];
min[0]=a[0];
for(int i=1;i<len;i++){
//以i为结尾的乘积最大有3种情况,1.a[i]为正,则最大为max[i-1]*a[i]
//2.a[i]为负,若min[i-1]为负,则最大为min[i-1]*a[i]
//3/若min[i-1]为正,则最大为a[i] 最小乘积同理
max[i]=maxNum(max[i-1]*a[i],min[i-1]*a[i],a[i]);
min[i]=minNum(min[i-1]*a[i],max[i-1]*a[i],a[i]);
printf("%d ",max[i]);
if(maxAcc<max[i]){
maxAcc=max[i];
}
}
printf("最大的子序列乘积为:%d",maxAcc);
}
//解法一 遍历所有 O(n^2)
void getMaxAcc(int a[],int len){
int maxAcc=0;
for(int i=0;i<len;i++){
int result=1;
for(int j=i;j<len;j++){
result*=a[j];
if(result>maxAcc){
maxAcc=result;
//printf("最大子序列和为:%d\n",maxAcc);
}
}
}
printf("最大子序列和为:%d",maxAcc);
}
int main(){
int test[]={-2,11,-4,13,-5,-2};
getMaxAcc2(test,sizeof(test)/sizeof(int));
}
0 0
- 最大乘积子序列
- 最大子序列乘积
- 乘积最大子序列
- 乘积最大子序列
- 乘积最大子序列
- 乘积最大子序列
- 最大子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- 最大连续子序列乘积
- LintCode-乘积最大子序列
- ios MKNetworkKit 的使用
- 反转链表
- string、Empty和null三者的区别
- guava中Range的使用方法(com.google.common.collect.Range)
- 计算机专业该不该考研?
- 最大子序列乘积
- 跟踪分析Linux内核的启动过程|Linux内核分析 第三周作业 - 网易云课堂
- 关于select , pselect , poll
- java中值传递解析
- JPA的查询语言—JPQL的关联查询
- JS正则表达式基础
- 数据库基本架构与日志的作用
- 巩固java(一)----java与对象
- HDU 5190-Go to movies