我發現越後面的題目好像越有水準, 就不是要跟你拚拳
這題麻煩在於你到底要怎麼知道從那邊開始挑, 看完提示後了解到
我們先加總, 然後因為我們只能選k張, 勢必會有n -k個連續的空間是我們挑不到的, 這n-k個的總和越小, 剩餘的越大
我們只要把這n-k個當移動窗口移動, 去找出最大值就行了
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int sum = 0;
for(auto c: cardPoints){
sum += c;
}
int n = cardPoints.size();
int min_value = 0;
int l = 0; int r = n - k - 1;
for(int i = l; i <=r;i++){
min_value += cardPoints[i];
}
int res = 0;
res = sum - min_value;
while( r < cardPoints.size() - 1){
r++;
min_value += cardPoints[r];
min_value -= cardPoints[l];
l++;
res = max(sum - min_value, res);
}
return res;
}
};