題目描述
給定一個數組arr,返回子數組的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子數組中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
題目保證沒有全為負數的數據
[要求]
時間復雜度為
O(n)O(n),空間復雜度為O(1)O(1)
輸入
[1, -2, 3, 5, -2, 6, -1]
返回值
12
思路
如果arr中沒有正數,那么產生的最大累加和一定是數組中的最大值
如果arr中有正數,從左到右遍歷arr,用變量cur記錄每一步的累加和。
當cur<0的時候,說明累加的這一部分肯定不能作為產生最大累加和子數組的左邊部分。所以此時讓cur=0,表示cur從下一個數開始重新累加。當cur>0的時候,每次累加都可能是最大累加和,所以用另一個變量max全程跟蹤記錄cur出現的最大值即可。
import java.util.*; public class Solution { /** * max sum of the subarray * @param arr int整型一維數組 the array * @return int整型 */ public int maxsumofSubarray (int[] arr) { if(arr.length==0||arr==null){ return 0; } int max = Integer.MIN_VALUE; int cur = 0; for(int i = 0; i!=arr.length;i++){ cur += arr[i]; max = Math.max(max,cur); cur = cur<0?0:cur; } return max; } }