题解
滑动窗口,转换思维,就是找 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;
}
};