首页 > 编程语言 > 详细

环数组的最大子数组的和

时间:2015-03-29 01:44:28      阅读:277      评论:0      收藏:0      [点我收藏+]

一、题目要求

题目:返回一个整数数组中最大子数组的和。
要求:
  输入一个整形数组,数组里有正数也有负数。
  数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
  如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
  同时返回最大子数组的位置。
  求所有子数组的和的最大值。要求时间复杂度为O(n)。 

二、设计思想

把数组每一位向后移动一位,最后一位放在第一位。循环多次,每次求其最大子数组,存放到新数组内,比较新数组中最大数,并输出。

三、源代码

#include <iostream.h>
int Largest(int list[],int length)
{

	int n,max=list[0];/

	for(n=0;n<=(length-1);n++)
	{
		if(list[n]>max)
		{
			max=list[n];
		}
	}
	return max;
}
int MaxSum2(int *A, int n)
{
    int nStart = A[n-1];
    int nAll = A[n-1];
    for(int i = n-2;i>=0;--i)
    {
        if(nStart<0)
            nStart = 0;
        nStart += A[i];
        if(nStart>=nAll)
        {
            nAll = nStart; 
        }
    }	
	return nAll;
}
int main(void)
{
	int sum[5]={1,-2,-3,-4,5};
	int sum2[15]={0};
	int gg[5]={0};
	int kk[5]={0};
	int t;
	for(int k=0;k<5;k++)
	{
		t=sum[4];
		for(int j=3;j>=0;j--)
		{sum[j+1]=sum[j];}
		sum[0]=t;
		gg[k]=MaxSum2(sum,5);		
	}
	cout<<Largest(gg,5)<<endl;
}

  

四、结果截图

技术分享

五、心得体会

结对开发,绝对强大!

两人配合,天下无敌!

凌晨00:08,睡觉去~~~

 

环数组的最大子数组的和

原文:http://www.cnblogs.com/zhaixing/p/4375100.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!