Advertisement
sweet1cris

Untitled

Jan 9th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.14 KB | None | 0 0
  1. public class Solution {
  2.     /**
  3.      * @param nums: A list of integers
  4.      * @return: An integer indicate the value of maximum difference between two
  5.      *          Subarrays
  6.      */
  7.     public int maxDiffSubArrays(int[] nums) {
  8.         // write your code here
  9.         int size = nums.length;
  10.         int[] left_max = new int[size];
  11.         int[] left_min = new int[size];
  12.         int[] right_max = new int[size];
  13.         int[] right_min = new int[size];
  14.         int[] copy = new int[size];
  15.         /*Get negative copy*/
  16.         for(int i = 0; i < size; i++){
  17.             copy[i] = -1 * nums[i];
  18.         }
  19.         int max = Integer.MIN_VALUE;
  20.         int sum = 0;
  21.         int minSum = 0;
  22.         /*Forward: get max subarray*/
  23.         for(int i = 0; i < size; i++){
  24.             sum += nums[i];
  25.             max = Math.max(max, sum - minSum);
  26.             minSum = Math.min(sum, minSum);
  27.             left_max[i] = max;
  28.         }
  29.         /*Backward: get max subarray*/
  30.         max = Integer.MIN_VALUE;
  31.         sum = 0;
  32.         minSum = 0;
  33.         for(int i = size - 1; i >= 0; i--){
  34.             sum += nums[i];
  35.             max = Math.max(max, sum - minSum);
  36.             minSum = Math.min(sum, minSum);
  37.             right_max[i] = max;
  38.         }
  39.         /*Forward: get min subarray*/
  40.         max = Integer.MIN_VALUE;
  41.         sum = 0;
  42.         minSum = 0;
  43.         for(int i = 0; i < size; i++){
  44.             sum += copy[i];
  45.             max = Math.max(max, sum - minSum);
  46.             minSum = Math.min(sum, minSum);
  47.             left_min[i] = -1 * max;
  48.         }
  49.         /*Backward: get min subarray*/
  50.         max = Integer.MIN_VALUE;
  51.         sum = 0;
  52.         minSum = 0;
  53.         for(int i = size - 1; i >= 0; i--){
  54.             sum += copy[i];
  55.             max = Math.max(max, sum - minSum);
  56.             minSum = Math.min(sum, minSum);
  57.             right_min[i] = -1 * max;
  58.         }
  59.         int diff = 0;
  60.         for(int i = 0; i < size - 1; i++){
  61.             diff = Math.max(diff, Math.abs(left_max[i] - right_min[i + 1]));
  62.             diff = Math.max(diff, Math.abs(left_min[i] - right_max[i + 1]));
  63.         }
  64.         return diff;
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement