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;
}
};