Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.65 KB | None | 0 0
  1. public class Solution {
  2.     public int MaxSubArray(int[] nums) {
  3.         if(nums.Length == 1)
  4.         {
  5.             return nums[0];
  6.         }
  7.         else
  8.         {
  9.             int mid = nums.Length/2;
  10.             int Left = MaxSubArray(ArraySlice(nums, 0, mid));
  11.             int Right = MaxSubArray(ArraySlice(nums, mid+1, nums.Length));
  12.             int Cross = MaxCross(nums, mid);
  13.             if((Left > Right)&&(Left > Cross))
  14.             {
  15.                return Left;
  16.             }
  17.             else if((Right > Left)&&(Right > Cross))
  18.             {
  19.                 return Right;
  20.             }
  21.             else
  22.             {
  23.                 return Cross;
  24.             }
  25.             return 1;
  26.         }
  27.     }
  28.     public int[] ArraySlice(int[] nums, int start,  int end)
  29.     {
  30.         if(end < 0)
  31.         {
  32.             end = nums.Length + end;
  33.         }
  34.         int len = end - start;
  35.         int[] newArray = new int[len];
  36.         for(int i = 0; i < len; i++)
  37.         {
  38.             newArray[i] = nums[i+start];
  39.         }
  40.         return newArray;
  41.     }
  42.     public int MaxCross(int[] nums, int mid)
  43.     {
  44.         int leftSum = Int32.MinValue;
  45.         int sum = 0;
  46.         for(int i = mid; i > 0; i--)
  47.         {
  48.             sum += nums[i];
  49.             if(sum > leftSum)
  50.             {
  51.                 leftSum = sum;
  52.             }
  53.         }
  54.         int rightSum = Int32.MinValue;
  55.         sum = 0;
  56.         for(int i = mid + 1; i < nums.Length; i++)
  57.         {
  58.             sum += nums[i];
  59.             if(sum > rightSum)
  60.             {
  61.                 rightSum = sum;
  62.             }
  63.         }
  64.         return leftSum + rightSum;
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement