mirror of https://github.com/doocs/leetcode.git
29 lines
914 B
Java
29 lines
914 B
Java
class Solution {
|
|
public int maxSubArray(int[] nums) {
|
|
return maxSub(nums, 0, nums.length - 1);
|
|
}
|
|
|
|
private int maxSub(int[] nums, int left, int right) {
|
|
if (left == right) {
|
|
return nums[left];
|
|
}
|
|
int mid = (left + right) >>> 1;
|
|
int lsum = maxSub(nums, left, mid);
|
|
int rsum = maxSub(nums, mid + 1, right);
|
|
return Math.max(Math.max(lsum, rsum), crossMaxSub(nums, left, mid, right));
|
|
}
|
|
|
|
private int crossMaxSub(int[] nums, int left, int mid, int right) {
|
|
int lsum = 0, rsum = 0;
|
|
int lmx = Integer.MIN_VALUE, rmx = Integer.MIN_VALUE;
|
|
for (int i = mid; i >= left; --i) {
|
|
lsum += nums[i];
|
|
lmx = Math.max(lmx, lsum);
|
|
}
|
|
for (int i = mid + 1; i <= right; ++i) {
|
|
rsum += nums[i];
|
|
rmx = Math.max(rmx, rsum);
|
|
}
|
|
return lmx + rmx;
|
|
}
|
|
} |