Note: (需練習)

先用Local紀錄比較連續或間斷

Global紀錄i前最大值

     public int maxTwoSubArrays(ArrayList<Integer> nums) {
        //KeyWord: Swipe from left and from right
        //Define: left[i] is the maximum sum of in front of i elements

        //先用Local紀錄比較連續或間斷
        //Global紀錄i前最大值
        int[] leftL = new int[nums.size()];
        int[] leftG = new int[nums.size()];
        //init
        leftL[0] = nums.get(0);
        leftG[0] = nums.get(0);
        for(int i = 1 ; i < nums.size(); i++){
            leftL[i] = Math.max(leftL[i - 1] + nums.get(i), nums.get(i));
            leftG[i] = Math.max(leftG[i - 1], leftL[i]);
        }

        int[] rightL = new int[nums.size()];
        int[] rightG = new int[nums.size()];
        //init
        rightL[nums.size() - 1] = nums.get(nums.size() - 1);
        rightG[nums.size() - 1] = nums.get(nums.size() - 1);

        for(int i = nums.size() - 2; i > 0; i--){
            rightL[i] = Math.max(rightL[i + 1] + nums.get(i), nums.get(i));
            rightG[i] = Math.max(rightG[i + 1], rightL[i]);
        }

        int max = Integer.MIN_VALUE;
        for(int i = 0; i < nums.size() - 1; i++){
            max = Math.max(max, leftG[i] + rightG[i + 1]);
        }

        return max;
    }

results matching ""

    No results matching ""