这题和之前做的一个特别类似,要求在长度为n的原数组的头和尾分别找到两个连续的子数组,两个数组加起来长度为k,且两个数组的和最大;显然就是在中间找一个长度为n-k的和最小的连续子数组。就直接遍历一遍就行了,最后用整个数组的和减掉中间数组和的最小值。
class Solution {
public int maxScore(int[] cardPoints, int k) {
int midSum = 0;
int totalSum = 0;
int i = 0;
for(; i < cardPoints.length - k; i++){
midSum += cardPoints[i];
totalSum += cardPoints[i];
}
int minSum = midSum;
for(int j = 0; i < cardPoints.length; i++, j++){
midSum += cardPoints[i] - cardPoints[j];
minSum = Math.min(midSum, minSum);
totalSum += cardPoints[i];
int x = 1;
}
return totalSum - minSum;
}
}