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 <= cardPointsi <= 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;
    }
};
相关推荐
h_a_o777oah8 分钟前
【图论】Tarjan 缩点:解决有向图中环的问题
c++·算法·图论·acm·强连通分量·缩点·tarjan
Tisfy8 分钟前
LeetCode 1386.安排电影院座位:哈希表+位运算
算法·leetcode·散列表·题解·哈希表
Nil2081 小时前
leetcode 199二叉树的右视图
算法·leetcode·深度优先
M78佐菲2 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
别动我齐刘海2 小时前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶
学习星球2 小时前
OpenHarness 全面配置教学——从游戏开发工作流引入
c++·游戏·ai·ai编程
wWYy.3 小时前
C++与C的区别
c语言·c++
AI备案指南-满满4 小时前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案
LuminousCPP4 小时前
数据结构‑二叉树(二):二叉堆从零实现|Heap结构设计 + 建堆优化 + 堆排序深度解析
c语言·数据结构·笔记·二叉树