Note:

define: Sum[i] means the maximum sum in front of i elements

public int maxSubArray(int[] nums){   //O(n)
        //DP
        /*if(nums == null || nums.length == 0){
            return 0;
        }
        int[] max = new int[nums.length];
        int[] sum = new int[nums.length];

        max[0] = nums[0];
        sum[0] = nums[0];
        for(int i = 1; i < nums.length; i++){
            sum[i] = Math.max(nums[i], sum[i - 1] + nums[i]);
            max[i] = Math.max(max[i - 1], sum[i]);
        }
        return max[nums.length - 1];*/






        //Save DP space
        //define: Sum[i] means the maximum sum in front of i elements
        if(nums == null || nums.length == 0){
            return 0;
        }

        int[] sum = new int[2];
        int[] max = new int[2];

        //initial
        sum[0] = nums[0];
        max[0] = nums[0];
        for(int i = 1; i < nums.length; i++){
            sum[i % 2] = Math.max(nums[i], sum[(i - 1) % 2] + nums[i]);
            max[i % 2] = Math.max(max[(i - 1) % 2], sum[i % 2]);
        }

        return max[(nums.length - 1) % 2];
    }

results matching ""

    No results matching ""