原题链接
思路:
这道题目,我读题目的时候是没有读懂它在说什么的,看了下样例后,才明白是求前缀和里面的最大值,而不是区间和,应该说是从起点开始的最大前缀和。
但注意对细节的处理:
即给定的数组下标是从 0 开始的,而求前缀和里面涉及了:
i
−
1
i-1
i−1,而
i
i
i 最初是
=
0
=0
=0 的,所以说下标越界。
注意 v e c t o r vector vector 类型的数组初始化定义长度: v e c t o r < i n t > s u m ( 长度 ) vector<int> sum(长度) vector<int>sum(长度)
代码:
class Solution {
public:
int largestAltitude(vector<int>& gain) {
int n = gain.size();
int mx = 0;
vector<int> sum(n+1); //初始化长度为n+1!
for (int i=0; i < n; i ++) {
if (i == 0) sum[i] = gain[i];
else sum[i] = sum[i-1] + gain[i];
}
for (int i=0; i < n; i ++) {
mx = max(mx, sum[i]);
}
return mx;
}
};