leetcode 53 Maximum Subarray
给定一个数组(至少包含一个整数),找出一个该数组的连续子数组,并且该连续子数组的和最大,返回最大值。
算法
同样使用动态规划解题,找出状态n和n-1之间的关系,然后从0到n-1遍历一遍得到结果
状态n和n-1的关系
在每个状态下记录两个值,一个是当前的最大值largest,一个是当前的连续子数组的和nowsum
nowsum(n)=nums[n] nowsum(n-1)<0,
nowsum(n-1)+nums[n] nowsum(n-1)>=0.
largest(n)=max(largest(n-1), nowsum(n)).
初始状态
largest(0)=nowsum(0)=nums[0].
code
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int largestsum = nums[0], nowsum = nums[0];
for (int i = 1; i < nums.size(); i++){
if(nowsum<0){
nowsum = nums[i];
}
else{
nowsum += nums[i];
}
largestsum = max(largestsum, nowsum);
}
return largestsum;
}
};
算法时间复杂度: O(n)
本文介绍了一种解决LeetCode 53题目的高效算法——最大子数组和问题。通过动态规划方法,文章详细阐述了如何确定状态间的关系并实现O(n)时间复杂度的解决方案。
312

被折叠的 条评论
为什么被折叠?



