给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
2012-10-04 19:05
941 查看
给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列;如果都是负数,则输出最大和是0。
// 连续元素相加和为最大的序列(有正有负).cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" int max(int a,int b,int c) { double max_v=a; if(b>a) max_v=b; if(c>max_v) max_v=c; return max_v; } int min(int a,int b,int c) { double min_v=a; if(b<a) min_v=b; if(c<min_v) min_v=c; return min_v; } int Maxadd(int count,int *a,int &x,int &y) { int *Min=new int[count+1];//Min[i]代表以a[i]结尾的最小连续序列的和 int *Max=new int[count+1];//Max[i]代表以a[i]结尾的最大连续序列的和 Min[0]=a[0]; Max[0]=a[0]; int max_val=Max[0],maxpos=0; for(int i=1;i<count;i++) { Max[i]=max(a[i],a[i]+Max[i-1],a[i]+Min[i-1]); Min[i]=min(a[i],a[i]+Max[i-1],a[i]+Min[i-1]); if(Max[i]>max_val) { max_val=Max[i]; maxpos=i;//以a[maxpos]结尾的连续序列和最大 } } int sum=a[maxpos],j=maxpos; while(sum!=max_val) { j--; //j是最大和连续子序列中的第一个下标 sum+=a[j]; } x=j; y=maxpos; delete [] Max; delete [] Min; return max_val; } void main() { int maxsum; int a[]={1,-2,3,5,-4,6}; int len=sizeof(a)/sizeof(a[0]); //for(int j=0;j<len;j++) //{ // printf("%4d",a[j]); //} //printf("\n"); int num=0; for(int k=0;k<len;k++) { if(a[k]<0) num++; } if(num==len) //如果元素都是负数,则输出最大和是0。 maxsum=0; else { int x=0,y=0; maxsum=Maxadd(len,a,x,y); for(int i=x;i<=y;i++) { printf("%4d",a[i]);//打印最大和的子序列 } } printf("\nmaxadd=%d\n",maxsum);; }
相关文章推荐
- 输入整形数组,数组里有正数也有负数,数组中一个或连续的多个整数组成数组的子数组,求所有子数组中和的最大值 ,例如输入的数组为{1,-2,3,10,-4,7,2,-5}和最大的子数组为{3,10,
- 一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
- 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
- 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- 每天学习一算法系列(4) (输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和)
- 算法题:找出一个数组中相加值最大的连续序列元素
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
- 每天学习一算法系列(4) (输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和)
- 【C语言】输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 一个整形数组中有正数也有负数, 数组中连续一个或多个组成子数组,每个子数组都有一个和, 求所有子数组中和的最大值
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- 求数组(元素可为正数、负数、0)的最大子序列和
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 求数组(元素可为正数、负数、0)的最大子序列和
- 求数组(元素可为正数、负数、0)的最大子序列和。
- 输入一个整形数组,数组中有正数也有负数,求该数组中所以子数组和的最大值
- 一个无序整数数组中找到最长连续序列(Longest Consecutive Sequence)和两个元素使得相差最小
- 求数组(元素可为正数、负数、0)的最大子序列和,