Advertisement
Guest User

Untitled

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