LeetCode1423. Maximum Points You Can Obtain from Cards

文章目录

一、题目

There are several cards arranged in a row, and each card has an associated number of points. The points are given in the integer array cardPoints.

In one step, you can take one card from the beginning or from the end of the row. You have to take exactly k cards.

Your score is the sum of the points of the cards you have taken.

Given the integer array cardPoints and the integer k, return the maximum score you can obtain.

Example 1:

Input: cardPoints = [1,2,3,4,5,6,1], k = 3

Output: 12

Explanation: After the first step, your score will always be 1. However, choosing the rightmost card first will maximize your total score. The optimal strategy is to take the three cards on the right, giving a final score of 1 + 6 + 5 = 12.

Example 2:

Input: cardPoints = [2,2,2], k = 2

Output: 4

Explanation: Regardless of which two cards you take, your score will always be 4.

Example 3:

Input: cardPoints = [9,7,7,9,7,7,9], k = 7

Output: 55

Explanation: You have to take all the cards. Your score is the sum of points of all cards.

Constraints:

1 <= cardPoints.length <= 105

1 <= cardPoints[i] <= 104

1 <= k <= cardPoints.length

二、题解

从前或后取k个元素和最大,转换为剩余n-k个连续窗口的元素和最小。利用滑动窗口求解。

注意accumulate函数cardPoints[i] - cardPoints[i-windowSize]的写法。

cpp 复制代码
class Solution {
public:
    int maxScore(vector<int>& cardPoints, int k) {
        int n = cardPoints.size();
        int windowSize = n - k;
        int totalSum = accumulate(cardPoints.begin(),cardPoints.end(),0);
        int sum = accumulate(cardPoints.begin(),cardPoints.begin()+windowSize,0);
        int minSum = sum;
        for(int i = windowSize;i < n;i++){
            sum += cardPoints[i] - cardPoints[i-windowSize];
            minSum = min(minSum,sum);
        }
        return totalSum - minSum;
    }
};
相关推荐
西土瓦1106 分钟前
AI算法18-最小角回归算法Least Angle Regression | LARS
人工智能·算法·回归
FS_tar11 分钟前
SMU Summer 2024 Contest Round 4
c++
向日葵xyz28 分钟前
C++【Opencv】获取图片中,任意两点之间的所有点的
开发语言·c++·opencv
结衣结衣.33 分钟前
深度刨析程序中的指针
java·c语言·数据库·经验分享·笔记·算法
Pumpkin_O39 分钟前
【B树、B-树、B+、B*树】
数据结构·b树
为更好遇见1 小时前
C语言-分支与循环(2)
c语言·开发语言·算法
TENET-1 小时前
数据结构——排序算法(冒泡、快速、选择、插入)
数据结构·算法·排序算法
库日天301 小时前
N叉树的前序遍历
算法
黎相思1 小时前
单链表算法 - 链表的回文结构
c语言·数据结构·算法·链表
时清云1 小时前
【算法】LRU缓存
算法·lru缓存