当前位置: 首页> 房产> 建筑 > 凡科网登陆_南京网燃网络科技有限公司_网站优化排名_不限次数观看视频的app

凡科网登陆_南京网燃网络科技有限公司_网站优化排名_不限次数观看视频的app

时间:2025/7/9 12:07:55来源:https://blog.csdn.net/2301_80122797/article/details/142988908 浏览次数:0次
凡科网登陆_南京网燃网络科技有限公司_网站优化排名_不限次数观看视频的app

   你好,欢迎阅读我的文章~

个人主页:@Mike

  所属专栏:动态规划

 

 


53. 最大子数组和

最大子数组和

分析:

使用动态规划解决

状态表示:

        1.以某个位置为结尾

        2.以某个位置为起点

这里使用以某个位置为结尾,结合题目要求,定义的状态表示为:

dp[i]表示:以i位置为结尾的所有子数组中的最大和。

 

dp[i]的所有可能有两种情况

(1).子数组长度为1:此时dp[i]=nums[i];

(2).子数组的长度大于1:此时dp[i]应该等于以i-1为结尾的所有子数组中和的最大值再加上nums[i],也就是dp[i-1]+nums[i]。

因为我们求最大值,所以我们对这两种情况取最大值即可

dp[i]=max(nums[i],dp[i-1]+nums[i]);

代码:

class Solution {
public:int maxSubArray(vector<int>& nums) {int n=nums.size();vector<int>dp(n+1);int ans=INT_MIN;for(int i=1;i<=n;i++){dp[i]=nums[i-1];dp[i]=max(dp[i],dp[i-1]+nums[i-1]);ans=max(ans,dp[i]);}return ans;}
};


动态规划

环形子数组的最大和

分析:

使用动态规划解决

算法思路:

本题与 最大子数组和 的区别在于,考虑问题的时候不仅要分析 数组内的连续区域 ,还要考
数组首尾相连 的一部分。结果的可能情况分为以下两种

1.结果在数组的内部,包括整个数组。

2.结果在数组首尾相连的一部分上。

对于第一种情况,我们只需按照最大子数组和的方法做即可。

对于第二种情况,我可以换一种思路,既然不在数组的内部的一段,那么我们求出数组的总和,然后在求出数组内的最小子数组和数组总和减去数组内的最小子数组和就是首尾相连的最大和

状态表示:

第二种情况:

g[i]表示:以i为结尾的所有子数组中和的最小值。

状态转移方程:

g[i]的所有可能有以下两种情况:

(1).子数组长度为1:此时g[i]=nums[i]

(2).子数组的长度大于1:此时g[i]应该等于以i-1为结尾的所有子数组中和的最小值再加上nums[i]。也就是g[i-1]+nums[i]。

转移方程为:

g[i]=min(nums[i],g[i-1]+nums[i])

代码:

class Solution {
public:int maxSubarraySumCircular(vector<int>& nums) {int n = nums.size();vector<int> maxx(n + 1);vector<int> g(n + 1);int temp1 = INT_MIN;int temp2 = INT_MAX;int sum=0;for(auto num:nums){sum+=num;}for (int i = 1; i <= n; i++) {maxx[i] = max(nums[i - 1], maxx[i - 1] + nums[i - 1]);temp1 = max(temp1, maxx[i]);}for (int i = 1; i <= n; i++) {g[i] = min(nums[i - 1], g[i - 1] + nums[i - 1]);temp2 = min(temp2, g[i]);if(temp2==sum){return temp1;}}return max(sum-temp2,temp1);//情况1和情况2取最大值}
};

关键字:凡科网登陆_南京网燃网络科技有限公司_网站优化排名_不限次数观看视频的app

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: