问题描述
求取数组中最大连续子序列和,例如给定数组为A={1, 3, -2, 4, -5}, 则最大连续子序列和为6,即1+3+(-2)+ 4 = 6。
O(N)解法
因为最大 连续子序列和只可能是以位置0~n-1中某个位置结尾。当遍历到第i个元素时,判断在它前面的连续子序列和是否大于0,如果大于0,则以位置i结尾的最大连续子序列和为元素i和前门的连续子序列和相加;否则,则以位置i结尾的最大连续子序列和为元素i。
1 int MaxSequence(int a[], int len) 2 { 3 int maxsum, maxhere; 4 maxsum = maxhere = a[0]; //初始化最大和为a【0】 5 for (int i=1; i<len; i++) { 6 if (maxhere <= 0) 7 maxhere = a[i]; //如果前面位置最大连续子序列和小于等于0,则以当前位置i结尾的最大连续子序列和为a[i] 8 else 9 maxhere += a[i]; //如果前面位置最大连续子序列和大于0,则以当前位置i结尾的最大连续子序列和为它们两者之和 10 if (maxhere > maxsum) { 11 maxsum = maxhere; //更新最大连续子序列和 12 } 13 } 14 return maxsum; 15 }