您的位置:首页 > 其它

第十周 简单的动态规划

2017-05-01 16:55 141 查看

算法题目 : Maximum Subarray

Add to List

算法题目描述: 

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
[-2,1,-3,4,-1,2,1,-5,4]
,

the contiguous subarray
[4,-1,2,1]
has the largest sum =
6
.

算法分析:

刚开始做动态规划的题目,感觉一头雾水,根本无从下手。就开始从网上找答案,找到了很多,但是有一个很简洁的。
自认为是很简洁高效的一段代码,但是理解起来可能有难度。
下面这段代码的复杂度是O(n),主要思想就是定义两个变量res和curSum,其中res保存最终要返回的结果,即最大的子数组之和,curSum初始值为0,每遍历一个数字num,比较curSum + num和num中的较大值存入curSum,然后再把res和curSum中的较大值存入res,以此类推直到遍历完整个数组,可得到最大子数组的值存在res中

算法代码(C++):

class Solution {
public:
int maxSubArray(vector<int>& nums) {
int res = INT_MIN, curSum = 0;
for (int num : nums) {
curSum = max(curSum + num, num);
res = max(res, curSum);
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: