LeetCode --- 132双周赛

题目列表

3174. 清除数字

3175. 找到连续赢 K 场比赛的第一位玩家

3176. 求出最长好子序列 I

3177. 求出最长好子序列 II

一、清理数字

这题直接根据题目,进行模拟即可,大体的思路是遍历字符串,遇到字母就加入答案,遇到数字就去掉答案中的最后一个字母,最后返回答案(类似进栈出栈),代码如下

class Solution {
public:string clearDigits(string s) {string ans;for(auto e:s){if(isdigit(e))  ans.pop_back();else ans += e;}return ans;}
};

二、找到连续赢k场的比赛的第一个玩家

这题的关键在于赢了的玩家会留下来和其他的玩家进行比赛,这就意味了在他之前参加比赛的人的skill都要小于他

  • 如果n个人比完了,其中没有人赢下k场比赛,那么第一个赢下k场比赛的玩家必然是skill最大的那个
  • 我们还要考虑在skill最大的玩家还没出现之前,就已经有玩家赢得k场比赛的情况

具体代码如下

class Solution {
public:int findWinningPlayer(vector<int>& skills, int k) {int n = skills.size();int pos = 0, cnt = 0;for(int i = 1; i < n; i++){if(skills[pos] < skills[i])pos = i, cnt = 0;cnt++;if(cnt == k) return pos;}return pos;}
};

三、求出最长好子序列 I & II

题目要求好子序列的最长长度,是一个子序列相关的动态规划问题。

状态定义:

子序列dp问题一般有两种类型,相邻相关 和 相邻无关 (看子序列的相邻元素之间是否存在某种关系/限制),分别对应两种状态的定义套路:相邻相关:以i为结尾的子序列的______,相邻无关:前i个元素中______。

本题显然是相邻相关的子序列问题,状态定义为 dp[i][j] 表示以i为结尾的子序列中最多有j个满足相邻元素不相等的最长子序列长度

状态转移方程:

  • 当nums[i] == nums[k]时,dp[i][j] = max(dp[i][j], dp[k][j] + 1)
  • 当nums[i] != nums[k]时,dp[i][j] = max(dp[i][j], dp[k][j-1] + 1)
  • 其中 k < i

初始化:考虑 j = 0 的情况,即最多有0个相邻元素相等的情况(等价于子序列中的元素全部相同),边遍历数组便统计数组出现次数即可。

代码如下

class Solution {
public:int maximumLength(vector<int>& nums, int k) {int n = nums.size();unordered_map<int,int> mp; // 记录相同元素的个数int ans = 0;vector<vector<int>> dp(n, vector<int>(k + 1));// 初始化for(int i = 0; i < n;i ++){dp[i][0] = ++mp[nums[i]];ans = max(ans, dp[i][0]);}for(int j = 1; j <= k; j++){dp[0][j] = dp[0][0];}for(int i = 1; i < n; i++){ // 枚举以哪个数字为结尾for(int j = 1; j <= k; j++){ // 枚举最多有j个相邻不相同的情况for(int p = 0; p < i; p ++){ // 从之前的状态进行转移if(nums[i] == nums[p]) dp[i][j] = max(dp[i][j], dp[p][j] + 1);else dp[i][j] = max(dp[i][j], dp[p][j-1] + 1);}}ans = max(ans, dp[i][k]); // 注意答案是所有以i为结尾的子序列最大长度的最大值}return ans;}
};

时间复杂度为O(kn^2),显然是过不了的第四问的,如何优化时间复杂度???我们需要将第三层for循环求max的时间缩短为O(1),如何做?

这里有一个技巧,我们可以将下标换成值,在去思考如何优化,即将状态定义改为 dp[x][j] 表示以x=nums[i]为结尾的最多有j个相邻不相同元素的子序列最大长度

转移方程:

  • 当 x == nums[k] 时,dp[x][j] = max(dp[x][j], dp[x][j] + 1) = dp[x][j]+1
  • 当 x != y 时,dp[x][j] = max(dp[x][j], dp[y][j-1] + 1)
  • 其中 k < i

故 dp[x][j] = max(dp[x][j],dp[y][j-1]) + 1,其中y是不等于x的出现过的数,所以我们只要维护好dp[y][j-1]的最大值就能在O(1)的时间复杂度内求出答案,即我们只要维护好前一列的最大值即可,即维护一个数组mx[j] = max(dp[y][j-1]),这里我们不需要额外关心 y == x的情况,因为dp[x][j] >= dp[x][j-1],所以不会对答案产生影响

代码如下

class Solution {
public:int maximumLength(vector<int>& nums, int k) {unordered_map<int,vector<int>> dp;vector<int> mx(k+2);for(int x:nums){if(!dp.contains(x)) dp[x].resize(k+1);auto& f = dp[x];for(int j = k; j >= 0; j--){ // 这里得是从后往前遍历,正着遍历会覆盖掉之前的mx[j]f[j] = max(f[j], mx[j]) + 1;mx[j+1] = max(mx[j+1], f[j]);}}return mx[k+1];}
};

总结:上面两种状态定义的大致思路是一样的,只是从下标改为了数值,转移方程也很相似,但是在维护max时,因为状态的转移和数值有关,我们需要在下标和数值之间建立联系,但问题是这种联系不是一一对应的,导致我们很难通过数值关系找到合适的下标来进行操作,但是我们只要将状态的定义和数值直接挂钩,我们就能很轻松的发现维护max的方法。

这里大家可以记住这样的一个技巧:当我们需要对dp进行优化时,且状态的转移和数值有关,我们可以优先考虑是否能将状态参数改为数值

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络协议四

一、云中网络 物理机的劣势&#xff1a; 1&#xff09;一旦需要扩容 CPU、内存、硬盘&#xff0c;都需要去机房手动弄&#xff0c;非常麻烦 2&#xff09;采购的机器往往动不动几百 G 的内存&#xff0c;而每个应用往往可能只需要 4 核 8G 3&#xff09;一台机器&#xff0c;…

怎么改变图片分辨率dpi数值?图片改分辨率的在线技巧

在上传图片的时候除了图片大小、尺寸等要求之外&#xff0c;修改图片分辨率也是比较常见的一个问题&#xff0c;需要将图片按照平台的要求修改完成后才可以正常使用。当遇到图片dpi的数值不满足使用需求的时候&#xff0c;有什么方法能够更加快捷的修改图片dpi呢&#xff1f;今…

从零开始利用MATLAB进行FPGA设计(七)固化程序

FPGA开发板&#xff1a;AX7020&#xff1b;Xilinx 公司的 Zynq7000 系列的芯片XC7Z020-2CLG400I&#xff0c;400引脚 FBGA 封装。 HARDWARE PLATFORM在2019以后的vivado中已经没有了。本期实际上已经与MATLAB无关&#xff0c;主要介绍通过VITIS等方法进行程序固化。 目录 ZY…

Github 2024-06-13 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1Shell项目1多存储文件列表/WebDAV程序 创建周期:1265 天开发语言:Go协议类型:GNU Affero General Public License v…

linux安装dgl

1.DGL官网、选择与自己cuda、python版本匹配的dgl的whl文件CUDA11.8、python10并下载 2.用pip install运行 pip install /home/u2023170749/download/dgl-2.2.0cu118-cp310-cp310-manylinux1_x86_64.whl

git提交错了?别慌,直接删除提交记录

git revert 和git reset &#xff01;这两个命令都有撤销操作的功能&#xff01;哪一个可以删除提提交记录&#xff1f;&#xff1f;&#xff1f; 使用git revert撤销提交 revert的英文释义是回复、恢复&#xff08;到原来的状态&#xff09; 作用 git revert 是 Git 中用于撤…

如何通过SOLIDWORKS教育版提高学生技能培养未来人才?

在当今这个科技日新月异的时代&#xff0c;掌握先进的数字化工具已经成为了一项需备的技能。作为一款功能强大的3D CAD软件&#xff0c;SOLIDWORKS教育版正是一个帮助学生提升技能、培养未来人才的重要工具。那么&#xff0c;如何通过SOLIDWORKS教育版提高学生技能呢&#xff1…

全方位·多层次·智能化,漫途水库大坝安全监测方案

党的十九届五中全会提出&#xff0c;到2025年前&#xff0c;完成新出现病险水库的除险加固&#xff0c;配套完善重点小型水库雨水情和安全监测设施&#xff0c;实现水库安全鉴定和除险加固常态化。 加快推进小型水库除险加固。加快构建气象卫星和测雨雷达、雨量站、水文站组成…

12306 火车票价格解析 (PHP 解析)

1. 从接口拿数据 日期 出发站 终点站 都填上 xxx/otn/leftTicketPrice/queryAllPublicPrice?leftTicketDTO.train_date2024-06-15&leftTicketDTO.from_stationBJP&leftTicketDTO.to_stationSJP&purpose_codesADULT 返回的数据是这样的 {"validateMess…

ASP.NET MVC企业级程序设计(查,删,展示详情,日期转换,¥字符串拼接)

题目&#xff1a; 实现过程 控制器代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MvcApplication1.Controllers {public class HomeController : Controller{//// GET: /Home/public Action…

【Bootstrap Faster R-CNN】《Is Faster R-CNN Doing Well for Pedestrian Detection?》

ECCV-2016 中山大学 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Region Proposal Network for Pedestrian Detection4.2 Feature Extraction4.3 Boosted Forest 5 Experiments5.1 Datasets and Metrics5.2 Ablation Experim…

【C++进阶学习】第一弹——继承(上)——探索代码复用的乐趣

前言&#xff1a; 在前面&#xff0c;我们已经将C的初阶部分全部讲完了&#xff0c;包括类与对象、STL、栈和队列等众多内容&#xff0c;今天我们就进入C进阶部分的学习&#xff0c;今天先来学习第一弹——继承 目录 一、什么是继承&#xff1f;为什么会有继承&#xff1f; 二…

WPS JS宏获取自动筛选后的行数

//WPS JS宏获取自动筛选后的行数 function getFilterRowCnt(shtRng)//shtRng表示筛选目标工作表范围 {let lngRowCnt 0;for(let rngCell of shtRng.SpecialCells(xlCellTypeVisible).Areas)//获取自动筛选后的单元格行数{lngRowCnt lngRowCnt rngCell.Rows.Count;}return ln…

Web--CSS基础

文章目录 定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动实战&#xff1a;个人信息卡片 flex布局响应式布局 定义方式 行内样式表 直接定义在style属性中&#xff0c;作用于当前标签 <img src "/imges/logo.jpg" alt "" …

Vue37-非单文件组件

一、组件的两种编写形式&#xff1a; 非单文件组件&#xff1b;单文件组件。 二、创建一个组件 2-1、组件中的el 组件中不写el&#xff0c;不说为谁服务。 2-2、组件中的data 因为对象形式&#xff0c;多处复用的话&#xff0c;有引用关系&#xff0c;改一处&#xff0c;另一…

atcoder ABC 355-C题详解

atcoder ABC 355-C题详解 ​ Problem Statement There is an NN grid, where the cell at the i-th row from the top and the j-th column from the left contains the integer N(i−1)j. Over T turns, integers will be announced. On Turn i, the integer Ai​ is anno…

[Nacos]No spring.config.import property has been defined

在学习 Spring Cloud Alibaba &#xff0c;Nacos组件&#xff0c;创建一个cloudalibaba-config-nacos-client&#xff0c;加载多配置集时遇到问题 配置了 bootstrap.yml 后启动项目报错&#xff1a; 是因为在springcloud 2020.0.2版本中把bootstrap的相关依赖从spring-cloud-s…

算法分析与设计期末考试复习GDPU

重点内容&#xff1a; 绪论&#xff1a; 简单的递推方程求解 1.19(1)(2) 、 教材例题 多个函数按照阶的大小排序 1.18 分治法&#xff1a; 分治法解决芯片测试问题 计算a^n的复杂度为logn的算法&#xff08;快速幂&#xff09; 分治法解决平面最近点对问…

OpenCV单词轮廓检测

OpenCV单词轮廓检测 0. 前言1. 策略分析2. 检测字符轮廓3. 检测单词轮廓相关链接 0. 前言 在根据文档图像执行单词转录时&#xff0c;通常第一步是识别图像中单词的位置。我们可以使用两种不同的方法识别图像中的单词&#xff1a; 使用 CRAFT、EAST 等深度学习技术使用基于 O…

用Python处理Excel的资源

用Python处理Excel的资源 python-excel 读写Excel文件 openpyxl openpyx文档l 读写Excel2010文件&#xff08;即xlsx&#xff09; openpyxl示例&#xff1a; from openpyxl import Workbook wb Workbook()# 获取active worksheet ws wb.active# 给单元格赋值 ws[A1] 4…