Skip to content

Commit 9de5357

Browse files
committed
MaximumSubarray53
1 parent 5ef8267 commit 9de5357

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/MaximumSubarray53.java

+29-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public int maxSubArray(int[] nums) {
3838
/**
3939
* https://leetcode.com/problems/maximum-subarray/discuss/20210/O(n)-Java-solution
4040
*/
41-
public int maxSubArray(int[] A) {
41+
public int maxSubArray2(int[] A) {
4242
int max = Integer.MIN_VALUE, sum = 0;
4343
for (int i = 0; i < A.length; i++) {
4444
if (sum < 0)
@@ -52,6 +52,34 @@ public int maxSubArray(int[] A) {
5252
}
5353

5454

55+
// divide-and-conquer
56+
public int maxSubArray3(int[] nums) {
57+
if (nums == null || nums.length == 0) return 0;
58+
return maxSubArray(nums, 0, nums.length-1);
59+
}
60+
61+
private int maxSubArray(int[] nums, int left, int right) {
62+
if (left > right) return Integer.MIN_VALUE;
63+
if (left == right) return nums[left];
64+
int mid = (left + right) / 2;
65+
int L = maxSubArray(nums, left, mid-1);
66+
int R = maxSubArray(nums, mid+1, right);
67+
int leftSum = 0;
68+
int tmp = 0;
69+
for (int i=mid-1; i>=left; i--) {
70+
tmp += nums[i];
71+
if (tmp > leftSum) leftSum = tmp;
72+
}
73+
tmp = 0;
74+
int rightSum = 0;
75+
for (int i=mid+1; i<=right; i++) {
76+
tmp += nums[i];
77+
if (tmp > rightSum) rightSum = tmp;
78+
}
79+
return Math.max(Math.max(L, R), leftSum + rightSum + nums[mid]);
80+
}
81+
82+
5583
public static void main(String[] args) {
5684
MaximumSubarray53 ms = new MaximumSubarray53();
5785

0 commit comments

Comments
 (0)