栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最大子序和 —— C++ 动态规划 分治法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最大子序和 —— C++ 动态规划 分治法

题目描述

给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

分治法代码:
#include
using 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/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443722.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号