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;
    }
};
相关推荐
Elias不吃糖1 分钟前
SQL 注入与 Redis 缓存问题总结
c++·redis·sql
重启的码农1 分钟前
enet源码解析(6)协议处理逻辑 (Protocol Processing)
c++·网络协议
树在风中摇曳19 分钟前
链表五大经典面试题详解:双指针与基础操作实战
数据结构·链表
AAA简单玩转程序设计20 分钟前
C++进阶基础:5个让人直呼“专业”的冷门小技巧
c++
Sɪʟᴇɴᴛ໊ོ23522 分钟前
Anyview数据结构第一章(按需自取)
c语言·开发语言·数据结构·算法
hqzing23 分钟前
介绍一个容器化的鸿蒙环境
c++·docker
松岛雾奈.23026 分钟前
机器学习--数据集的标准化和归一化算法;随机森林
人工智能·算法·机器学习
橘颂TA35 分钟前
【剑斩OFFER】算法的暴力美学——丢失的数字
数据结构·算法·leetcode·结构与算法
努力的白熊嗨36 分钟前
大文件 Hash 计算:Web Worker 并行优化的原理与局限性
javascript·算法
CoovallyAIHub1 小时前
存储风暴下的边缘智能韧性:瑞芯微RK3588如何将供应链挑战转化为市场机遇
深度学习·算法·计算机视觉