题解
滑动窗口,转换思维,就是找 n - k 个连续的最小值,即找到k个最大值。
注意时间复杂度,accumulate时间为O(n),内层循环不可以使用。
代码
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int n = cardPoints.size();
int windowSize = n - k;
int minsum = accumulate(cardPoints.begin(),cardPoints.begin()+windowSize,0);
int sum = minsum;
for(int i = windowSize; i < n; i++){
sum = sum + cardPoints[i] - cardPoints[i - windowSize];
minsum = min(minsum,sum);
}
return accumulate(cardPoints.begin(),cardPoints.end(),0) - minsum;
}
};

本文解析了滑动窗口问题的核心思想,即如何通过累积求和并动态调整来找到k个连续最大值。重点讲解了如何避免内层循环以优化时间复杂度,并提供了Solution类的实现代码。
318

被折叠的 条评论
为什么被折叠?



