leetcode力扣刷题打卡
题目:1423. 可获得的最大点数
描述:几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。
你的点数就是你拿到手中的所有卡牌的点数之和。
给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。
思路:
原代码##
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int n = cardPoints.size();
int winsize = n - k;
int winsum = 0;
for (int i = 0; i < winsize; ++i) {
winsum += cardPoints[i];
}
int minwin = winsum;
for (int i = winsize; i < n; ++i) {
winsum += cardPoints[i] - cardPoints[i - winsize];
minwin = min(minwin, winsum);
}
int sum = accumulate(cardPoints.begin(), cardPoints.end(), 0);
return sum - minwin;
}
};