1. 题目来源
2. 题目说明
3. 题目解析
方法一:枚举+前缀和+常规解法
这个数据范围的话就需要考虑一种线性的解法了,这个取法是要将前缀或者是后缀连续的全部取完,并且取到的数字个数为 k
,要求返回最大取值即可,那么就可以预处理前缀和数组、后缀和数组,遍历 k
种取法求出最大值即可,即为线性的时间复杂度。
这个题目就和本周赛第一题很相似了,就是暴力前后枚举所有情况。话说一开始我定义的数组名是 left
right
结果莫名其妙报错了???这就很奇怪了嗷。
参见代码如下:
// 执行用时 :152 ms, 在所有 C++ 提交中击败了100.00%的用户
// 内存消耗 :43.4 MB, 在所有 C++ 提交中击败了100.00%的用户
const int MAXN = 1e5;
int l[MAXN + 5], r[MAXN + 5];
class Solution {
public:
int maxScore(vector<int>& c, int k) {
int n = c.size();
l[0] = 0, r[0] = 0;
for (int i = 1; i <= n; ++i) l[i] = l[i - 1] + c[i - 1], r[i] = r[i - 1] + c[n - i];
int ans = 0;
for (int i = 0; i <= k; ++i) {
ans = max(ans, l[i] + r[k - i]);
}
return ans;
}
};