给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
分治法代码:#includeusing namespace std; int MaxSum(int a[],int left,int right){ int sum=0,midSum=0,leftSum=0,rightSum=0; int center,s1=0,s2=0,lefts=0,rights=0; if(left==right){ sum=a[left]; }else{ center=(left+right)/2; leftSum=MaxSum(a,left,center); rightSum=MaxSum(a,center+1,right); for(int i=center;i>=left;--i){ lefts+=a[i]; if(lefts>s1){ s1=lefts; } } for(int j=center+1;j<=right;++j){ rights+=a[j]; if(rights>s2){ s2=rights; } } midSum=s1+s2; sum=midSum>leftSum?midSum:leftSum; sum=sum>rightSum?sum:rightSum; } return sum; } int main(){ int n; cin>>n; int a[n]; for(int i=0;i >a[i]; } cout< 分治法运行截图: 动态规划代码: class Solution { public int maxSubArray(int[] nums) { int maxSum = nums[0]; int[] dp = new int[nums.length]; dp[0] = nums[0]; for (int i = 1; i < nums.length; ++i) { dp[i] = dp[i - 1] > 0 ? dp[i - 1] + nums[i] : nums[i]; maxSum = Math.max(maxSum, dp[i]); } return maxSum; } }动态规划leetcode提交记录: leetcode地址:https://leetcode-cn.com/problems/maximum-subarray/



