class Solution {
public int maxScore(int[] cardPoints, int k) {
// 获取cardPoints的长度
int len = cardPoints.length;
int sum = 0;
// 求出cardPoints的总值
for(int i = 0; i < len; i++){
sum += cardPoints[i];
}
// 如果我们选取的卡牌数量大于我们的卡牌数量,则直接返回总值即可
if(k >= len){
return sum;
}
int sumSmall = 0;
// 求出最原始的滑动窗口的值 [0,len-k)
for(int i = 0; i < len - k; i++){
sumSmall += cardPoints[i];
}
// 标记滑动窗口的大小
int left = 0;
int right = len - k;
int min = sumSmall;
// 每一次滑动都要加上右边的值,减去左边的值
while(right < len){
sumSmall += cardPoints[right++];
sumSmall -= cardPoints[left++];
min = Math.min(min, sumSmall);
}
// 最后返回总值减去最小值即可
return sum - min;
}
}