Title

LeetCode每日一题2025-10-10-LC3147-从魔法师身上吸取的最大能量

3147. 从魔法师身上吸取的最大能量

思路

其实我们可以注意到:按照题意我们可以把整个数组分成\(K\)个子序列

\[ a_1, a_{1 + k}, a_{1 + 2k} \dots \\ a_2, a_{2 + k}, a_{2 + 2k} \dots \\ \dots \\ a_k, a_{2k}, a_{3k} \dots \\ \]

实际上我们求把每一个数组都维护一个后缀和数组,求最大值就好了

时间复杂度 \(O(k \times \frac{n}{k}) = O(n)\)

代码

class Solution 
{
public:
    int maximumEnergy(vector<int>& energy, int k) 
    {
        int n = energy.size();
        int ret = INT_MIN;
        // 处理前k个即可
        for (int i = 0; i < k; i++)
        {
            int start = i;
            std::vector<int> suf;
            for (int j = start; j < n; j += k) suf.push_back(energy[j]);
            int len = suf.size();
            int tmp = suf[len - 1];
            for (int i = len - 2; i >= 0; i--)
            {
                suf[i] += suf[i + 1];
                tmp = std::max(tmp, suf[i]);
            }
            ret = std::max(ret, tmp);
        }    
        return ret;
    }
};
posted @ 2025-10-11 11:21  栗悟饭与龟功気波  阅读(3)  评论(0)    收藏  举报