Skip to content

Instantly share code, notes, and snippets.

@jianminchen
Created August 29, 2018 04:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/c0a6ca3c9a104b8e0be1bfd57e43bfd6 to your computer and use it in GitHub Desktop.
Save jianminchen/c0a6ca3c9a104b8e0be1bfd57e43bfd6 to your computer and use it in GitHub Desktop.
Leetcode 53 - maximum subarray - spent 20 minutes to think about and then the design could not lead to a solution
public class Solution {
public int MaxSubArray(int[] nums)
{
if (nums == null)
return 0;
int max = int.MinValue;
var result = maxStartAndMaxEnd(nums, 0, nums.Length - 1, ref max);
return max;
}
/// <summary>
/// August 27, 2018
/// </summary>
/// <param name="nums"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="maxValue"></param>
/// <returns></returns>
public static int[] maxStartAndMaxEnd(int[] nums, int start, int end, ref int max)
{
if (start == end)
return new int[]{nums[start], nums[end]};
var middle = start + (end - start) / 2;
var sum = 0;
var leftMax = maxStartAndMaxEnd(nums, start, start == middle? start : (middle - 1), ref max);
sum = leftMax[1];
var rightMax = maxStartAndMaxEnd(nums, middle, end, ref max);
sum += rightMax[0];
// let us consider the range include middle - 1, middle
max = Math.Max(max, sum);
return new int[]{leftMax[0], rightMax[1]};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment