[劍指offer]連續子陣列的最大和
阿新 • • 發佈:2018-11-02
本博文引自:http://blog.csdn.net/u014458048/article/details/54971991
題目描述:
輸入一個整形陣列,數組裡有正數也有負數。陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。求所有子陣列的和的最大值。要求時間複雜度為O(n)。
解題思路
設sum[i]表示以nums[i]結尾的子陣列的最大和,則sum[i]與sum[i-1]有兩種關係:
1、當sum[i-1]<=0時,sum[i] = nums[i];
2、當sum[i-1] > 0時,sum[i] = sum[i-1] +nums[i]。
Java程式碼
public static int FindGreatestSumOfSubArray(int[] nums) { int len = nums.length; int[] sum = new int[len]; sum[0] = nums[0]; for(int i = 1; i < len; i++) { if(sum[i - 1] > 0) sum[i] = sum[i - 1] + nums[i]; else if(sum[i - 1] <= 0) sum[i] = nums[i]; System.out.println(sum[i]); } int max = sum[0]; for(int n : sum) { if(n > max) max = n; } return max; }