53. 最大子数组和

53. 最大子数组和 - 力扣(LeetCode) (leetcode-cn.com)

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

子数组 是数组中的一个连续部分。

 

解:dp/贪心算法

顺序遍历,用一变量sum记录当前子数组和,另一变量res记录最大子数组和。

下标每后移一位更新res,若sum<0后续子数组和必定更小,此时便把sum重置。

复制代码
 1 class Solution {
 2 public:
 3     int maxSubArray(vector<int>& nums) {
 4         if(nums.size() == 1)
 5             return nums.at(0);
 6         int res = INT_MIN;
 7         int sum = nums.at(0);
 8         for(int i = 1;i < nums.size();++i)
 9         {
10             res = res > sum?res:sum;
11             sum = sum > 0?sum+nums.at(i):nums.at(i);
12         }
13         res = res > sum?res:sum;
14         return res;
15     }
16 };
复制代码
复制代码
 1 class Solution {
 2 public:
 3     int maxSubArray(vector<int>& nums) {
 4         int result = INT32_MIN;
 5         int count = 0;
 6         for (int i = 0; i < nums.size(); i++) {
 7             count += nums[i];
 8             if (count > result) { // 取区间累计的最大值(相当于不断确定最大子序终止位置)
 9                 result = count;
10             }
11             if (count <= 0) count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
12         }
13         return result;
14     }
15 };
复制代码
复制代码
//dp原始版
1
class Solution { 2 public: 3 int maxSubArray(vector<int>& nums) { 4 if (nums.size() == 0) return 0; 5 vector<int> dp(nums.size(), 0); // dp[i]表示包括i之前的最大连续子序列和 6 dp[0] = nums[0]; 7 int result = dp[0]; 8 for (int i = 1; i < nums.size(); i++) { 9 dp[i] = max(dp[i - 1] + nums[i], nums[i]); // 状态转移公式 10 if (dp[i] > result) result = dp[i]; // result 保存dp[i]的最大值 11 } 12 return result; 13 } 14 };
复制代码
复制代码
//dp优化版
1
class Solution { 2 public: 3 int maxSubArray(vector<int>& nums) { 4 if (nums.size() == 0) return 0; 5 int pre,cur=0; // dp[i]表示包括i之前的最大连续子序列和 6 pre = nums[0]; 7 int result = pre; 8 for (int i = 1; i < nums.size(); ++i) { 9 cur = max(pre + nums[i], nums[i]); // 状态转移公式 10 if (cur > result) result = cur; // result 保存dp[i]的最大值 11 pre = cur; 12 } 13 return result; 14 } 15 };
复制代码

 

posted @   Jasmine_Sokko  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示