1. 程式人生 > >[劍指offer]連續子陣列的最大和

[劍指offer]連續子陣列的最大和

本博文引自: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; 
    }