题目:给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选)。
分析:设最大和对应的最左边的下标和最右边的下表分别为i,j。0<=i<j<n
分为两种情况:
1.当子数组不跨越母数组的时候,可以使用常规求最大子数组和的方法
2.当子数组跨越母数组的时候,要求该“跨越子数组”的最大子串和,则需在母数组中寻找一个“不跨越”的最小子串和,然后用总和减去该值,即可
上面两种情况取到的最大值与0比较,取大输出即可。
参考代码如下: