How to optimally divide an array into two subarrays so that sum of elements in both are same, otherwise give an error?

前端 未结 22 983
一生所求
一生所求 2020-12-02 11:20

How to optimally divide an array into two subarrays so that sum of elements in both subarrays is same, otherwise give an error?

Example 1

Given the array

22条回答
  •  既然无缘
    2020-12-02 12:10

    @Gal Subset-Sum problem is NP-Complete and has a O(n*TotalSum) pseudo-polynomial Dynamic Programming algorithm. But this problem is not NP-Complete. This is a special case and in fact this can be solved in linear time.

    Here we are looking for an index where we can split the array into two parts with same sum. Check following code.

    Analysis: O(n), as the algorithm only iterates through the array and does not use TotalSum.

    public class EqualSumSplit {
    
        public static int solution( int[] A ) {
    
            int[] B = new int[A.length];
            int[] C = new int[A.length];
    
            int sum = 0;
            for (int i=0; i< A.length; i++) {
                sum += A[i];
                B[i] = sum;
                // System.out.print(B[i]+" ");
            }   
            // System.out.println();
    
            sum = 0;
            for (int i=A.length-1; i>=0; i--) {
                sum += A[i];
                C[i] = sum;
                // System.out.print(C[i]+" ");
            }
            // System.out.println();
    
            for (int i=0; i< A.length-1; i++) {
                if (B[i] == C[i+1]) {
                    System.out.println(i+" "+B[i]);
                    return i;
                }
            }
    
            return -1;
    
        }
    
         public static void main(String args[] ) {
             int[] A = {-7, 1, 2, 3, -4, 3, 0};
             int[] B = {10, 20 , 30 , 5 , 40 , 50 , 40 , 15};        
             solution(A);
             solution(B);
         }
    
    }
    

提交回复
热议问题