问题:
有一串 int 数字串,存在数组a中。要求找到起始位置start和终止位置end,使得从start位置到end位置的所有数字之和最大,返回这个最大值max。
算法思路:
设 suffer 为以 a[x] 终止且包含 a[x] 的最大序列的和,有:
if(suffer+a[x+1]>max) suffer+=a[x+1],max=suffer;
else if(Suffer+a[x+1]) suffer+=a[x+1];
else suffer=0;
保证max是所有suffer中最大的一个。其算法的时间复杂度为O(n),代码实现如下:
public int getMaxSub(int[] a){ int max=0; int suffer=0; for(int i=1;i<a.length;i++){ if(a[i]+suffer>max){ suffer+=a[i]; max=suffer; } else if(a[i]+suffer>0){ suffer+=a[i]; } else suffer=0; } return suffer; }