Max double slice sum

前端 未结 14 1212
后悔当初
后悔当初 2020-12-13 20:53

Recently, I tried to solve the Max Double Slice Sum problem in codility which is a variant of max slice problem. My Solution was to look for a slice that has maximum value w

14条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-13 21:04

    Using the idea from http://en.wikipedia.org/wiki/Maximum_subarray_problem and Abhishek Bansal's answer above. 100% test pass:

    public class Solution {
    
    public int solution(int[] A) {
        int[] maxEndingHere = maxEndingHere(A);
        int[] maxStartingHere = maxStartingHere(A);
        int maxSlice = 0;
        for (int i = 1; i < A.length-1;i++) {
          maxSlice = Math.max(maxSlice, maxEndingHere[i-1]+maxStartingHere[i+1]);
        }
        return maxSlice;
    }
    
    
    /**
     * Precalculate ending subarrays. Take into account that first and last element are always 0
     * @param input
     * @return
     */
    public static int[] maxEndingHere(int[] input) {
        int[] result = new int[input.length];
        result[0] = result[input.length-1] = 0;
        for (int i = 1; i < input.length-1; i++) {
            result[i] = Math.max(0, result[i-1] + input[i]);
        }
        return result;
    }
    
    /**
     * Precalculate starting subarrays. Take into account that first and last element are always 0
     * @param input
     * @return
     */
    public static int[] maxStartingHere(int[] input) {
        int[] result = new int[input.length];
        result[0] = result[input.length-1] = 0;
        for (int i = input.length-2; i >= 1; i--) {
            result[i] = Math.max(0, result[i+1] + input[i]);
        }
        return result;
    }
    

    }

提交回复
热议问题