Advertisement
Guest User

Untitled

a guest
Aug 20th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. public class MaximumSubArray {
  2.  
  3. public int maxSubArray(int [] A){
  4. if(A.length==0)//if length = 0, return 0
  5. return 0;
  6. else
  7. return maxSubArray(A, 0, A.length-1);
  8. }
  9.  
  10. public int maxSubArray(int [] A, int start, int end){
  11. if(start==end){
  12. return A[start]; //if only one element, return that
  13. }
  14. int mid = start + (end-start)/2;
  15. int leftMaxSum = maxSubArray(A, start, mid);
  16. int rightMaxSum = maxSubArray(A, mid+1, end);
  17. //lets calculate the part in which sub array will start in the left half and ends in right half
  18. int sum = 0;
  19. int leftMidMax =0;
  20. for (int i = mid; i >=start ; i--) {
  21. sum += A[i];
  22. if(sum>leftMidMax)
  23. leftMidMax = sum;
  24. }
  25. sum = 0;
  26. int rightMidMax =0;
  27. for (int i = mid+1; i <=end ; i++) {
  28. sum += A[i];
  29. if(sum>rightMidMax)
  30. rightMidMax = sum;
  31. }
  32. int centerSum = leftMidMax + rightMidMax;
  33. return Math.max(centerSum, Math.max(leftMaxSum, rightMaxSum));
  34. }
  35. public static void main(String[] args) {
  36. int [] A = {-2, 12, -5, 10, -1, -6, 4};
  37. MaximumSubArray m = new MaximumSubArray();
  38. System.out.println("Maximum Sub Array sum is : " + m.maxSubArray(A));
  39. }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement