《算法设计与分析》第十三周作业
标签(空格分隔): 课堂作业
姓名:李**
学号:16340114
题目:Maximum Subarray(https://leetcode.com/problems/maximum-subarray/)
题目概要
给定一串数字,找出连续子序列的最大和
思路
sum[i]表示从开头到i(included)所能求得的最大和
sum[i]的计算公式如下:
s
u
m
[
i
]
=
n
u
m
s
[
i
]
,
w
h
e
n
i
=
0
sum[i] = nums[i], when i=0
sum[i] = nums[i], when i=0
s
u
m
[
i
]
=
n
u
m
s
[
i
]
,
w
h
e
n
s
u
m
[
i
−
1
]
<
=
0
sum[i] = nums[i], when sum[i-1]<=0
sum[i] = nums[i], when sum[i−1]<=0
s
u
m
[
i
]
=
s
u
m
[
i
−
1
]
+
n
u
m
s
[
i
]
,
w
h
e
n
s
u
m
[
i
−
1
]
>
0
sum[i] = sum[i-1] + nums[i], when sum[i-1]>0
sum[i] = sum[i−1] + nums[i], when sum[i−1]>0
sum[]中最大的数即是答案
具体实现
由上述公式计算即可
心得
脑阔疼,project有点多,这道easy题写了快一个小时(黑人问号???)
源码:
class Solution {
public:
int maxSubArray(vector<int>& nums)
{
vector<int> sum = vector<int>(nums.size());
sum[0] = nums[0];
for (int i = 1; i < nums.size(); ++i)
{
if (sum[i-1] > 0)
sum[i] = sum[i-1] + nums[i];
else
sum[i] = nums[i];
}
int max = sum[0];
for (int i = 1; i < nums.size(); ++i)
{
if (sum[i] > max)
max = sum[i];
}
return max;
}
};