InterVi

Maximum subarray problem: 2D Kadane's algorithm (easy)

Mar 30th, 2018
738
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.27 KB | None | 0 0
  1. /**
  2. * Get max sum from 2D array example
  3. * Use Kadane's algorithm
  4. * Maximum subarray problem: https://en.wikipedia.org/wiki/Maximum_subarray_problem
  5. * Author: https://github.com/InterVi
  6. */
  7. import java.lang.Math;
  8. import java.util.AbstractMap.SimpleEntry;
  9. import java.util.Map.Entry;
  10.  
  11. public class MaxSumExample {
  12.   public static void main(String[] args) { //testing
  13.     int[][] test = {
  14.       {-1, -2, -1},
  15.       {-20},
  16.       {-40, -50},
  17.       {-1, 2, 3, -4, 5},
  18.       {4, -1, 2, 1},
  19.       {1, 1, 20},
  20.       {2, -4, -1},
  21.       {1, 1}
  22.     };
  23.     System.out.print(maxSum2D(test));
  24.   }
  25.  
  26.   /**
  27.   * Kadane 1d
  28.   * @return max sum
  29.   */
  30.   public static int maxSum(int[] a) {
  31.     int result = a[0]; //get first value for correct comparison
  32.     int sum = a[0];
  33.     for (int i = 1; i < a.length; i++) {
  34.       sum = Math.max(sum + a[i], a[i]); //first step getting max sum, temporary value
  35.       result = Math.max(result, sum);
  36.     }
  37.     return result;
  38.   }
  39.  
  40.   /**
  41.   * Kadane 2d
  42.   * @param array
  43.   * @return max sum
  44.   */
  45.   public static int maxSum2D(int array[][]){
  46.     int result = Integer.MIN_VALUE; //result max sum
  47.     for (int i = 0; i < array.length; i++) {
  48.       int sum = maxSum(array[i]);
  49.       result = Math.max(result, sum);
  50.     }
  51.     return result;
  52.   }
  53. }
Add Comment
Please, Sign In to add comment