题目
https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/
滑动窗空
思路:
要从两边取k个元素使之和最大,也就是取连续n-k个元素使之和最小,因此可以使用滑动窗口
class Solution {
public int maxScore(int[] cardPoints, int k) {
int n = cardPoints.length;
int windowSize = n - k;
int sum = 0;
for (int i = 0; i < windowSize; i++) {
sum += cardPoints[i];
}
int minSum = sum;
for (int i = windowSize; i < n; i++) {
sum += cardPoints[i] - cardPoints[i - windowSize];
minSum = Math.min(minSum, sum);
}
return Arrays.stream(cardPoints).sum() - minSum;
}
}