[LeetCode 周賽186] 2. 分割字符串的最大得分(枚舉、前綴和、常規解法)

1. 題目來源

鏈接:5393. 可獲得的最大點數

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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章