- 从数组两边取,则中间剩余部分连续,则考虑使用滑动窗口
- 窗口中值最小,对应的是头尾取值的最大值
- 剩余元素个数 n- k,即滑动窗口大小
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int n = cardPoints.size();
int total = accumulate(cardPoints.begin(), cardPoints.end(), 0);
int win = n - k;
int winsum = accumulate(cardPoints.begin(), cardPoints.begin() + win, 0);
int minsum = winsum;
for(int i = win; i < n; i++)
{
winsum += cardPoints[i] - cardPoints[i - win];
minsum = min(winsum, minsum);
}
return total - minsum;
}
};