comefrom: <awangdev>Maximum Subarray II_5.java
code: public int maxTwoSubArrays(ArrayList<Integer> nums) {
          if (nums == null || nums.size() == 0) {
              return 0;
          }
          int[] frontSum = new int[nums.size()];
          int[] endSum = new int[nums.size()];
          int maxSum = 0;
          frontSum[0] = nums.get(0);
          for (int i = 1; i < frontSum.length; i++) {
              if (frontSum[i - 1] < 0) {
                  frontSum[i] = nums.get(i);
              } else {
                  frontSum[i] = frontSum[i - 1] + nums.get(i);
              }
          }
          maxSum = frontSum[0];
          for (int i = 1; i < frontSum.length; i++) {
              if (frontSum[i] < maxSum) {
                  frontSum[i] = maxSum;
              } else {
                  maxSum = frontSum[i];
              }
          }
          
          endSum[endSum.length - 1] = nums.get(nums.size() - 1);
          for (int i = endSum.length - 2; i >= 0; i--) {
              if (endSum[i + 1] < 0) {
                  endSum[i] = nums.get(i);
              } else {
                  endSum[i] = endSum[i + 1] + nums.get(i);
              }
          }
          maxSum = endSum[endSum.length - 1];
          for (int i = endSum.length - 2; i >= 0; i--) {
              if (endSum[i] < maxSum) {
                  endSum[i] = maxSum;
              } else {
                  maxSum = endSum[i];
              }
          }
          maxSum = Integer.MIN_VALUE;
          for (int i = 0; i < nums.size() - 1; i++) {
              maxSum = Math.max(maxSum, frontSum[i] + endSum[i + 1]);
          }
          return maxSum;
      }
masked: public int sample_funcname ( ArrayList < Integer > var_0 ) {
    if ( var_0 == null || var_0 . size ( ) == 0 ) {
      return 0 ;
    }
    int [ ] var_1 = new int [ var_0 . size ( ) ] ;
    int [ ] var_2 = new int [ var_0 . size ( ) ] ;
    int var_3 = 0 ;
    var_1 [ 0 ] = var_0 . get ( 0 ) ;
    for ( int var_4 = 1 ;
    var_4 < var_1 . length ;
    var_4 ++ ) {
      if ( var_1 [ var_4 - 1 ] < 0 ) {
        var_1 [ var_4 ] = var_0 . get ( var_4 ) ;
      }
      else {
        var_1 [ var_4 ] = var_1 [ var_4 - 1 ] + var_0 . get ( var_4 ) ;
      }
    }
    var_3 = var_1 [ 0 ] ;
    for ( int var_4 = 1 ;
    var_4 < var_1 . length ;
    var_4 ++ ) {
      if ( var_1 [ var_4 ] < var_3 ) {
        var_1 [ var_4 ] = var_3 ;
      }
      else {
        var_3 = var_1 [ var_4 ] ;
      }
    }
    var_2 [ var_2 . length - 1 ] = var_0 . get ( var_0 . size ( ) - 1 ) ;
    for ( int var_4 = var_2 . length - 2 ;
    var_4 >= 0 ;
    var_4 -- ) {
      if ( var_2 [ var_4 + 1 ] < 0 ) {
        var_2 [ var_4 ] = var_0 . get ( var_4 ) ;
      }
      else {
        var_2 [ var_4 ] = var_2 [ var_4 + 1 ] + var_0 . get ( var_4 ) ;
      }
    }
    var_3 = var_2 [ var_2 . length - 1 ] ;
    for ( int var_4 = var_2 . length - 2 ;
    var_4 >= 0 ;
    var_4 -- ) {
      if ( var_2 [ var_4 ] < var_3 ) {
        var_2 [ var_4 ] = var_3 ;
      }
      else {
        var_3 = var_2 [ var_4 ] ;
      }
    }
    var_3 = Integer . MIN_VALUE ;
    for ( int var_4 = 0 ;
    var_4 < var_0 . size ( ) - 1 ;
    var_4 ++ ) {
      var_3 = Math . max ( var_3 , var_1 [ var_4 ] + var_2 [ var_4 + 1 ] ) ;
    }
    return var_3 ;
  }
  