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

浙公网安备 33010602011771号