- 从数组两边取,则中间剩余部分连续,则考虑使用滑动窗口
- 窗口中值最小,对应的是头尾取值的最大值
- 剩余元素个数 n- k,即滑动窗口大小
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int n = cardPoints.size();
int total = accumulate(cardPoints.begin(), cardPoints.end(), 0);
int win = n - k;
int winsum = accumulate(cardPoints.begin(), cardPoints.begin() + win, 0);
int minsum = winsum;
for(int i = win; i < n; i++)
{
winsum += cardPoints[i] - cardPoints[i - win];
minsum = min(winsum, minsum);
}
return total - minsum;
}
};
文章介绍了如何使用滑动窗口技巧解决一个与整数数组相关的问题,给定卡点分数数组和窗口大小k,计算在每个滑动窗口中值最小的子数组的总和,目标是找到使总和最大的头尾组合。
320

被折叠的 条评论
为什么被折叠?



