根据题解,由于总是从头和尾选取这k
张牌,则最后剩下的n-k
张牌一定是连续的,则要求k
张牌的最大值,相当于取n-k
张连续的牌的最小值。
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int n = cardPoints.size();
int len = n - k;
int sum = 0;
int minSum = 0, curSum = 0;
for (int i = 0; i < n; ++i) {
sum += cardPoints[i];
if (i == len - 1) {
minSum = sum;
curSum = sum;
}
if (len > 0 && i >= len && i < n) {
curSum = curSum + cardPoints[i] - cardPoints[i - len];
minSum = min(minSum, curSum);
}
}
return sum - minSum;
}
};