题目
https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/
分析
等价于 寻找一个元素和最小的滑动窗口(窗口内有连续len-k个元素)。窗口两侧外侧的数之和就是我们要求的数之和。因为要求最大,所以求窗口和最小。
代码
class Solution {
public int maxScore(int[] cardPoints, int k) {
int len=cardPoints.length;
int i=0;
int sum=0;
for(int a=0;a<len-k;a++){
sum+=cardPoints[a];
}
//寻找最小的滑动窗口 长度为len-k
int min=sum;
while(i<=k-1){
sum-=cardPoints[i];
sum+=cardPoints[i+len-k];
min=Math.min(min,sum);
i++;
}
int s=0;
for(int c:cardPoints){
s+=c;
}
return s-min;
}
}
复杂度
时间O(N)
空间O(1)