leetcode-53-线性DP-最大子序和 发表于 2020-04-15 | 分类于 数据结构与算法 题目 解法12345678910111213141516171819202122232425262728293031323334353637// 动态规划class Solution {public: int maxSubArray(vector<int>& nums) { int n = nums.size(); if(n == 0) return 0; if(n == 1) return nums[0]; // dp[i] = x 表示以第i个元素结尾的子序列的最大子序和 vector<int> dp(n); dp[0] = nums[0]; for(int i = 1; i < n; ++i){ dp[i] = max(dp[i-1] + nums[i], nums[i]); } return *max_element(dp.begin(), dp.end()); }};// 动态规划优化空间复杂度class Solution {public: int maxSubArray(vector<int>& nums) { int n = nums.size(); if(n == 0) return 0; if(n == 1) return nums[0]; int tempSum = nums[0]; // 第i个元素结尾时的临时子序列的和 int res = tempSum; // 最终结果 for(int i = 1; i < n; ++i){ tempSum = max(tempSum + nums[i], nums[i]); res = max(res, tempSum); } return res; }};