static void Main(string[] args) { /* * Given an integer array nums, find the contiguous subarray (containing at least one number) * which has the largest sum and return its sum. * Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, * which is more subtle. * * Example 1: * Input: nums = [-2,1,-3,4,-1,2,1,-5,4] * Output: 6 * Explanation: [4,-1,2,1] has the largest sum = 6. * * Example 2: * Input: nums = [1] * Output: 1 * * Example 3: * Input: nums = [0] * Output: 0 * * Example 4: * Input: nums = [-1] * Output: -1 * * Example 5: * Input: nums = [-2147483647] * Output: -2147483647 * * Constraints: * * 1 <= nums.length <= 2 * 104 * -231 <= nums[i] <= 231 - 1 */ int[] nums1 = { -2, 1, -3, 4, -1, 2, 1, -5, 4 }; int res1 = Solution1.MaxSubArray(nums1); int[] nums2 = { -1, 2, 3, -5, 4 }; int res2 = Solution2.MaxSubArray(nums2); int[] nums3 = { 1 }; int res3 = Solution2.MaxSubArray(nums3); }
public static int helper(int[] nums, int left, int right) { if (left == right) { return(nums[left]); } int p = (left + right) / 2; int leftSum = helper(nums, left, p); int rightSum = helper(nums, p + 1, right); int crossSum = Solution1.crossSum(nums, left, right, p); int result = Math.Max(Math.Max(leftSum, rightSum), crossSum); return(result); }