分治法python
def maxSub(nums,left,right):
if left==right:
return nums[left]
mid = int((left+right)/2)
print("mid=",mid)
leftmax = maxSub(nums,left, mid)
rightmax = maxSub(nums,mid+1,right)
mid_left_sum = 0
mid_right_sum = 0
mid_left_max = -float('inf')
mid_right_max = -float('inf')
for i in reversed(nums[left:mid+1]):
print("nums[left:mid+1]: ",nums[left:mid+1])
mid_left_sum += i
if mid_left_sum>mid_left_max:
mid_left_max = mid_left_sum
for i in nums[mid+1:right+1]:
print("nums[mid+1:right]: ",nums[mid+1:right+1])
mid_right_sum += i
if mid_right_sum>mid_right_max:
mid_right_max = mid_right_sum
mid_max = mid_left_max + mid_right_max
maxes = [leftmax,rightmax,mid_max]
print("maxes = ",maxes)
res = max(maxes)
return res
def maxSubArray( nums):
left = 0
right = len(nums)-1
return maxSub(nums,left,right)
print(maxSubArray([5,4,-1,7,8]))
动态规划
class Solution
{
public:
int maxSubArray(vector<int> &nums)
{
int result = INT_MIN;
int numsSize = int(nums.size());
int sum = 0;
for (int i = 0; i < numsSize; i++)
{
sum += nums[i];
result = max(result, sum);
if (sum < 0)
{
sum = 0;
}
}
return result;
}
};
作者:pinku-2
链接:https:
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n = len(nums)
max_sum_ending_curr_index = max_sum = nums[0]
for i in range(1, n):
max_sum_ending_curr_index = max(max_sum_ending_curr_index + nums[i], nums[i])
max_sum = max(max_sum_ending_curr_index, max_sum)
return max_sum