题目:
求一个循环数组的连续子数组的最大和。
解法:
《编程之美》上给出一种方法:
1)求[0, n-1]的最大和;
2)如果跨过了n-1,则计算以n-1为尾部的最大子数组[i, n-1],以0为开始的最大子数组[0 , j];
如果i<=j,则M = a[0]+...+a[n-1];
否则,M= a[0]+...+a[j] + a[i]+...a[n-1].
该方法有问题:
例如,1 7 -3 6 2
以2结束的为全串,以1开始的为全串,有M=全加和。
但,我们可以看到,最大应该为6 2 1 7.
因此,我们可以这样做:
1 7 -3 6 2 1 7 -3 6 2
这样做一次连接,第二种情况先计算以n-1为尾部的最大子数组[i, n-1],以0为开始的最大子数组[0 , j];
然后,如果i<=j,则从i开始,找出长度小于数组长度的最大和即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。
转载于:https://www.cnblogs.com/wangicter/archive/2012/10/20/4767269.html