Advertisement
ogv

Untitled

ogv
Mar 26th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. class Solution {
  2. public int splitArray(int[] nums, int m) {
  3. int n = nums.length;
  4. int[] cs = new int[n+1];
  5.  
  6. cs[0] = 0;
  7. for (int i = 1; i <= n; i++)
  8. cs[i] = cs[i - 1] + nums[i-1];
  9.  
  10. //System.out.println(Arrays.toString(cs));
  11. int[][] memo = new int[n+1][m+1];
  12. return search(0, m, 0, n, cs, memo);
  13. }
  14.  
  15. private int search(int from, int m, int largest, int n, int[] cs, int[][] memo) {
  16. System.out.println("from=" + from + " m=" + m + " largest=" + largest);
  17. if (memo[from][m] != 0) {
  18. System.out.println("Return from memo " + memo[from][m] + " for " + from + " " + m);
  19. return memo[from][m];
  20. }
  21.  
  22. if (m == 1) {
  23. largest = Math.max(largest, cs[n] - cs[from]);
  24. memo[from][m] = largest;
  25. System.out.println("Return " + largest + " for " + from + " " + m);
  26. return largest;
  27. }
  28.  
  29. int minLargest = Integer.MAX_VALUE;
  30. for (int split = from + 1; split <= n - m + 1; split++) {
  31. int nextLargest = Math.max(largest, cs[split] - cs[from]);
  32. System.out.println("Try split at " + split + " with " + nextLargest);
  33. int res = search(split, m-1, nextLargest, n, cs, memo);
  34. minLargest = Math.min(minLargest, Math.max(nextLargest, res));
  35. }
  36.  
  37. memo[from][m] = minLargest;
  38. System.out.println("Return " + minLargest + " for " + from + " " + m);
  39. return minLargest;
  40. }
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement