【每日一题】可获得的最大点数

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:滑动窗口
    • 方法二:前缀和
  • 写在最后

Tag

【滑动窗口】【前缀和】【数组】【2023-12-03】


题目来源

1423. 可获得的最大点数


题目解读

在一排卡牌中拿出 k 张卡牌,每次必须从这一排卡牌的开头或者末尾进行拿取,返回可以获得卡牌的最大点数。


解题思路

一种解题思路是递归的方法,但是该方法超时了。

每次从开头或者末尾拿取一张卡牌之后,接着从子卡牌中按照同样的方式拿取卡牌,直至拿取 k 次,这是一个典型的子问题,可以使用递归方法来完成。

但是,因为递归的过程实际上是列举了所有的拿取可能,因此时间复杂度为 O ( N × k ) O(N \times k) O(N×k) N N N 为卡牌数组的长度,根据本题的数据规模,执行规模达到了 1 0 1 0 10^10 1010,所以递归方法会超时。

递归超时,另寻他法。

仔细观察拿取方式后,会发现,拿取 k 张卡牌之后,剩下的 n-k 张卡牌是连续的。

那么,问题就转化成了求卡牌数组中长度为 n-k 的连续子数组的最小和。具体实现有两种方法:

  • 滑动窗口;
  • 前缀和。

方法一:滑动窗口

维护一个长度为 n-k 的固定滑窗,在卡牌数组中进行滑动,每次滑动会有一个新的值加入滑窗以及一个旧的值离开滑窗,在滑动中统计最小的连续子数组和。

实现代码

class Solution {
public:
    int maxScore(vector<int>& cardPoints, int k) {
        int n = cardPoints.size();
        int winSize = n-k;  // 滑窗大小

        // 以前n-k的区间和作为初始值
        int sum = accumulate(cardPoints.begin(), cardPoints.begin() + winSize, 0);
        int minVal = sum;
        for(int i = winSize; i < n; ++i){
            sum += cardPoints[i] - cardPoints[i-winSize];
            minVal = min(minVal, sum);
        }
        return accumulate(cardPoints.begin(), cardPoints.end(), 0) - minVal;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为卡牌数组的长度。

空间复杂度: O ( 1 ) O(1) O(1)

方法二:前缀和

维护一个记录数组前缀和的数组 preSum,通过两段前缀和的作差计算连续子数组的和,动态更新最小的连续子数组和。

关于 preSum 的更新,可以参考 一文讲清楚【前缀和】。

实现代码

class Solution {
public:
    int maxScore(vector<int>& cardPoints, int k) {
        int n = cardPoints.size();
        vector<int> preSum(n+1);
        for (int i = 1; i <= n; ++i) {
            preSum[i] = preSum[i-1] + cardPoints[i-1];
        }

        int winSize = n - k;
        int minSum = 1e9;
        for (int i = 0; i <= k; ++i) {
            minSum = min(minSum, preSum[winSize + i] - preSum[i]);
        }
        return preSum[n] - minSum;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为卡牌数组的长度。

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/212678.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于OpenAPI工具包以及LSTM的CDN网络流量预测

基于LSTM的CDN网络流量预测 本案例是基于英特尔CDN以及英特尔 OpenAPI Intel Extension for TensorFlow* Intel oneAPIDPC Library 的网络流量预测&#xff0c;CDN是构建在现有网络基础之上的智能虚拟网络&#xff0c;目的是将源站内容分发至最接近用户的节点&#xff0c;使用…

视频生成的发展史及其原理解析:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0

前言 考虑到文生视频开始爆发&#xff0c;比如11月份就是文生视频最火爆的一个月 11月3日&#xff0c;Runway的Gen-2发布里程碑式更新&#xff0c;支持4K超逼真的清晰度作品(runway是Stable Diffusion最早版本的开发商&#xff0c;Stability AI则开发的SD后续版本)11月16日&a…

Debian下载安装教程

目录 一.前言二.下载三.安装 一.前言 这篇文章展示如何使用VMware Workstation Player安装Debian12虚拟机。 二.下载 官网地址&#xff1a;官网 进入官网之后可以直接点击下载Debian选项&#xff0c;这样下载的是最新版的网络安装镜像。 三.安装 使用VMware Workstation P…

Concurrent Security of Anonymous Credentials Light, Revisited

目录 摘要引言 摘要 我们重新审视了著名的匿名证书轻&#xff08;ACL&#xff09;方案&#xff08;Baldimtsi和Lysyanskaya&#xff0c;CCS’13&#xff09;的并发安全保证。该方案最初被证明在按顺序执行时是安全的&#xff0c;其并发安全性仍然是一个悬而未决的问题。Benham…

GEE:Sobel算子卷积

作者&#xff1a;CSDN _养乐多_ 本文将深入探讨边缘检测中的一个经典算法&#xff0c;即Sobel算子卷积。我们将介绍该算法的基本原理&#xff0c;并演示如何在Google Earth Engine中应用Sobel算子进行图像卷积操作。并以试验区NDVI为例子&#xff0c;研究区真彩色影像、NDVI图…

Vue+SpringBoot解决session跨域问题

做了一个前后端分离&#xff0c;因为前后端的 session id不一致&#xff0c;导致前端请求时&#xff0c;后端的session读取不到对应的值&#xff0c;造成登录问题。 解决方法&#xff1a; SpringBoot项目: 添加一个跨域配置 代码如下: 或者controller使用CrossOrigin Conf…

单细胞个性化细胞注释

关于单细胞中级的课程内容&#xff0c;前面已经有了三次直播。欢迎回看&#xff5e; 单细胞直播一理解seurat数据结构与pbmc处理流程 单细胞直播二从GSE104154中理解seurat结构 单细胞直播三seurat数据结构与数据可视化 本期主要内容 本期指哪打哪&#xff0c;自己选定细胞&…

玻色量子事件活动

2023年 2023.7 玻色量子携最新相干光量子计算机惊艳亮相2023数字经济大会 2023.6 打造“新型计算数据中心”&#xff01;玻色量子与科华数据&#xff08;002335.SZ&#xff09;携手共创 2023.6 玻色量子“天工量子大脑”亮相中关村论坛&#xff0c;大放异彩 2023.5 100量…

美容院管理系统服务预约会员小程序效果如何

美容院在美业场景中需求度较高&#xff0c;尤其女性爱美悦己消费逐年增加&#xff0c;如清洁焕肤、祛皱抗衰、激光脱毛等美容项目都有不少需求者。 互联网深入美业行业多年&#xff0c;传统线下经营模式已经很难满足当今客户消费流程&#xff0c;如品牌寻找、服务预约、到店、…

用HeidiSQL在MySQL中创建新的数据库

用有权限的用户登录&#xff1a; 右键单击&#xff0c;选择&#xff1a; 输入要创建的数据库名称&#xff0c;然后点击“确定”&#xff1a; 刷新下&#xff0c;就看到新创建的数据库了&#xff1a; 在新创建的数据库中&#xff0c;就可以做其它操作了&#xff0c;例如…

Python标准库:random库【侯小啾python领航班系列(十七)】

Python标准库random【侯小啾python领航班系列(十七)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

【SpringMVC】Spring Web MVC入门(一)

文章目录 前言什么是Spring Web MVC&#xff1f;什么是MVC什么是Spring MVC&#xff1f; Spring Boot 和 Spring MVC 的区别什么是Spring Boot&#xff1f;关系和区别 Spring MVC 学习注解介绍1. SpringBootApplication2. RestController3. RequestMapping3.1 RequestMapping 使…

(c语言)作业讲解

例一&#xff1a; 题目&#xff1a; 答案&#xff1a; #include<stdio.h> #include<math.h> int main() {int x;double sum0; int g 0; int i 0;scanf("%d",&x);while (x > 0){g x % 10;if (g % 2 0){g 0;}else{g 1;}sum g*pow(10,i);…

电子印章管理系统:是什么、3个平台推荐

说到印章&#xff0c;相信看过近现代电视剧的人都见过&#xff0c;一般在订立合约时最常用到&#xff0c;双方在合约上加盖印鉴&#xff0c;即代表着合约的成立。 我小时候还见过我父亲的印章&#xff0c;只是随着时代的发展&#xff0c;印章因为不易携带&#xff0c;容易被盗…

Spring事务传播机制

在上篇文章中&#xff0c;小编带领大家了解了Spring事务&#xff1a;Spring事务-CSDN博客&#xff0c;那么&#xff0c;本篇文章将会带领大家深入了解&#xff1a;Spring事务传播机制&#xff0c;感兴趣的各位老铁&#xff0c;欢迎深入探讨&#xff01;&#xff01; 事务传播机…

10行代码实现vue路由最简单的登陆拦截

需求&#xff1a;不涉及任何角色权限&#xff0c;基本实现目标&#xff0c;有token就可查看任何页面&#xff0c;否则就去登陆&#xff0c;来一步步实现 1. 创建你的路由页面&#xff0c;此处略了 2. 导航守卫拦截判断思路 // 创建路由 const router createRouter({history…

深度学习手势识别算法实现 - opencv python 计算机竞赛

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

rman 0级 1级备份结合的注意事项 obsolete 和 FRA自动清理

1. 当心0级备份从controlfile中删除&#xff0c;0级备份决定recover windows时间 &#xff0c;一级不算 Incremental backup cycle: Sundays: Level 0 Monday-Sat: cumulative level 1 Every Friday and Saturday, the time for the incremental level 1 backup sud…

创投课程研报专题课 | 如何写出高质量研报

协会邀请了来自GPTDAO的分析师——Will作为VC创投课程研报专题课的嘉宾&#xff0c;将于北京时间12月2日(周六)晚上21:00 PM-22:00 PM&#xff0c;与所有对Web3投资、创业心怀热忱的朋友一同探讨《如何写出高质量的研报》这个激动人心的话题。 浙江大学学生区块链协会&#xff…