1423. 可获得的最大点数
原题地址: 力扣每日一题:可获得的最大点数
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。
你的点数就是你拿到手中的所有卡牌的点数之和。
给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。
这两天正好在做一些滑动窗口的题目,这道题使用滑动窗口解题会非常简单,因为取走的数是两边的数,所以把中间的数看作一个长度为 n - k 的滑动窗口即可。
class Solution {public int maxScore(int[] cardPoints, int k) {int n = cardPoints.length;int windowSize = n - k;// 最前面作为滑动窗口初始值,不断移动寻找 sum 的最小值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;}
}
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
每日一题专栏:不易|力扣算法每日一题 ❤