思路
- 不断取头尾,最终剩下的是连续的数组
- 取头尾的最大值,也就是取连续序列的最小值
- 滑动窗口大小为n-k,初始化滑动窗口sum,之后移动 减左窗口值 加右窗口值
- 累加某部分向量可以使用
acumulate()函数
代码
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int n = cardPoints.size();
int windowSize = n - k;
int sum = accumulate(cardPoints.begin(), cardPoints.begin() + windowSize, 0);
int minSum = sum;
for (int i = windowSize; i < n; ++i) {
sum += cardPoints[i] - cardPoints[i - windowSize];
minSum = min(minSum, sum);
}
return accumulate(cardPoints.begin(), cardPoints.end(), 0) - minSum;
}
};