Leetcode - 132双周赛
目录
一、3174. 清除数字
二、3175. 找到连续赢 K 场比赛的第一位玩家
三、3176. 求出最长好子序列 I
四、3177. 求出最长好子序列 II
一、3174. 清除数字
本题可以使用栈来模拟,遇到数字弹出栈顶元素,遇到字母入栈。
代码如下:
//使用字符串模拟栈实现
class Solution {public String clearDigits(String s) {StringBuilder st = new StringBuilder();for(char c : s.toCharArray()){if(Character.isDigit(c)){st.deleteCharAt(st.length()-1);}else{st.append(c);}}return st.toString();}
}
二、3175. 找到连续赢 K 场比赛的第一位玩家
本题可以使用双端队列模拟,但是要注意当 k >= n 时,直接返回最大值
代码如下:
class Solution {public int findWinningPlayer(int[] s, int k) {int n = s.length;int mx = 0, idx = 0;Deque<int[]> que = new ArrayDeque<>();for(int i=0; i<n; i++){que.addLast(new int[]{s[i], i});if(mx < s[i]){mx = s[i];idx = i;}}if(k >= n) return idx;int t = k;mx = que.poll()[0];idx = 0;while(t > 0){int[] x = que.removeFirst();if(x[0] > mx){que.addLast(new int[]{mx, idx});mx = x[0];idx = x[1];t = k-1;}else{que.addLast(x);t--;}}return idx;}
}
我们发现当循环大于 n 的时候,返回的结果一定是 max(skills),所以我们只需要考虑在一个循环内能否找出连赢 k 场的玩家,可以使用一个变量 cnt 记录当前玩家的胜利次数,如果 cnt >= k,直接返回答案。否则返回 max(skills)
代码如下:
class Solution {public int findWinningPlayer(int[] skills, int k) {int idx = 0;int cnt = 0;for(int i=1; i<skills.length; i++){if(skills[i] > skills[idx]){idx = i;cnt = 0;}cnt++;if(cnt >= k) return idx;}return idx;}
}
三、3176. 求出最长好子序列 I
本题可以使用dfs枚举选哪个/选或不选来解决,这里讲解枚举选哪个的做法。先定义dfs,我们需要当前下标 i,根据题目子序列中 seq[i] != seq[i+1] 的数不能超过 k 个,我们还需要上一次选择的下标 j,以及 seq[i] != seq[i+1] 的次数 k。所以可以定义 dfs(i,j,k):前一个数为nums[j]时,[i,n-1]的中取出最大子序列,且该子序列 seq[i] != seq[i+1] 的次数不超过 k。
但是这么写记忆化时需要三个参数,会导致时间复杂度过大,如何优化呢?可以发现上面是从前往后遍历,所以枚举时需要一个参数来告诉它起始点是什么。但是如果反过来遍历,就可以直接省去这个参数,因为我们是从 j - 1,往前遍历,重新定义 dfs(j,k):后一个数为nums[j]时,[0,j-1]的中取出最大子序列,且该子序列 seq[i] != seq[i+1] 的次数不超过 k。
代码如下:
class Solution {public int maximumLength(int[] nums, int k) {int n = nums.length;memo = new int[n+1][k+1];for(int[] row : memo)Arrays.fill(row, -1);return dfs(n,k,nums);}int[][] memo;int dfs(int j, int k, int[] nums){int res = 0;if(memo[j][k] != -1) return memo[j][k]; for(int i=0; i<j; i++){if(j==nums.length || nums[i] == nums[j])res = Math.max(res, dfs(i, k, nums)+1);else if(k > 0)res = Math.max(res, dfs(i, k-1, nums)+1);}return memo[j][k] = res;}
}
递推写法
f[i][j]:以 i 为结尾的子序列中最多有 j 个满足相邻元素不相等的最长子序列长度
假设 k < i:
- nums[i] == nums[k],f[i][j] = Math.max(f[i][j],f[k][j]+1)
- nums[i] != nums[k],f[i][j] = Math.max(f[i][j],f[k][j]+1)
class Solution {public int maximumLength(int[] nums, int k) {int n = nums.length;int[][] f = new int[n+1][k+1];int ans = 0;Map<Integer, Integer> map = new HashMap<>();for(int i = 0; i < n; i++){f[i][0] = map.merge(nums[i], 1, Integer::sum);ans = Math.max(ans, f[i][0]);}for(int j = 1; j <= k; j++){f[0][j] = f[0][0];}for(int j=1; j<n; j++){for(int a=1; a<=k; a++){ for(int i=0; i<j; i++){ if(nums[i]==nums[j])f[j][a] = Math.max(f[j][a], f[i][a]+1);elsef[j][a] = Math.max(f[j][a], f[i][a-1]+1);}}ans = Math.max(ans, f[j][k]);}return ans;}
}
四、3177. 求出最长好子序列 II
本题和上一题一样,但是数据范围更大,上述n^2*k的做法超时了,如何优化??我们可以把f[i][j] 中的 i 转换成对应的 nums[i],这时 f[x][j]:以 x (即nums[i])结尾的子序列中最多有 j 个满足相邻元素不相等的最长子序列长度。
假设 k < i:
- nums[k] == x,f[x][j] = Math.max(f[x][j],f[x][j]+1)
- nums[k] != x,f[x][j] = Math.max(f[x][j],f[nums[k]][j-1]+1)
上述写法可以合并 f[x][j] = Math.max(f[x][j]+1,f[nums[k]][j-1]+1),我们可以额外维护一个mx[j] = max(f[nums[k]][j-1])就可以在O(1)时间算出f[x][j]
public class Solution {public int maximumLength(int[] nums, int k) {Map<Integer, int[]> fs = new HashMap<>();int[] mx = new int[k + 2];for (int x : nums) {int[] f = fs.computeIfAbsent(x, i -> new int[k + 1]);for (int j = k; j >= 0; j--) {f[j] = Math.max(f[j], mx[j]) + 1;mx[j + 1] = Math.max(mx[j + 1], f[j]);//同01背包,防止覆盖还需使用的值}}return mx[k + 1];}
}
相关文章:

Leetcode - 132双周赛
目录 一、3174. 清除数字 二、3175. 找到连续赢 K 场比赛的第一位玩家 三、3176. 求出最长好子序列 I 四、3177. 求出最长好子序列 II 一、3174. 清除数字 本题可以使用栈来模拟,遇到数字弹出栈顶元素,遇到字母入栈。 代码如下: //使用字…...

Mongodb在UPDATE操作中使用$push向数组中插入数据
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第69篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…...
ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果
ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果 核心代码完整代码在线示例ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类,可以添加数据以及操作 FBO(ManagedFBO); 通过操作 FBO,可以通过后处理实现很多效果,官方提供了几个示例,…...

信息系统项目管理师 | 信息系统安全技术
关注WX:CodingTechWork 信息安全概念 安全属性 秘密性:信息不被未授权者知晓。完整性:信息是正确的、真实的、未被篡改的、完整无缺。可用性:信息可以随时正常使用。 安全分层 设备安全 设备的稳定性:在一定时间…...

Java数据类型与运算符
1. 变量和类型 变量指的是程序运行时可变的量,相当于开辟一块空间来保存一些数据。 类型则是对变量的种类进行了划分,不同类型的变量具有不同的特性。 1.1 整型变量(重点) 基本语法格式: int 变量名 初始值;代码示…...

网络虚拟化考题
vrrp讲过吗??? d 每一层都是什么设备啊 abcd 为啥流量不可控不可视 c是啥意思 讲过吗 abc aNET网络虚拟化是啥啊 为啥?? 啥是CDN?????...

《C++ Primer》导学系列:第 7 章 - 类
7.1 定义抽象数据类型 7.1.1 类的基本概念 在C中,类是用户定义的类型,提供了一种将数据和操作这些数据的函数(成员函数)组合在一起的方法。类定义了对象的属性和行为,通过实例化类来创建对象。 7.1.2 定义类 定义类…...

idea intellij 2023打开微服务项目部分module未在左侧项目目录展示(如何重新自动加载所有maven项目model)
项目场景: springcloud微服务项目,部分模块暂时不需要用到,就在pom.xml文件中注释掉相应的模块,突然有一天打开项目,部分项目module 在idea intellij工具左侧文件夹找不到了,重新file->open本地项目也还是部分模块…...
生成视频 zeroscope_v2_576w 学习笔记
目录 生成视频代码: 维度报错: 解决方法,修改代码: 已开源: 视频生成模型 Zeroscope开源 免费无水印 视频生成模型 Zeroscope_v2_576w 开源 - 腾讯云开发者社区-腾讯云 生成视频代码: import torch fro…...

H3C综合实验
实验拓扑 实验要求 1、按照图示配置IP地址 2、sw1和sw2之间的直连链路配置链路聚合 3、 公司内部业务网段为VLAN10和VLAN20; VLAN 10是市场部,vlan20是技术部,要求对VLAN进行命名以便识别;PC1属于vlan10,PC2属于vlan20…...

QThread 与QObject::moveToThread在UI中的应用
1. QThread的两种用法 第一种用法就是继承QThread,然后覆写 virtual void run(), 这种用法的缺点是不能利用信号槽机制。 第二种用法就是创建一个线程,创建一个对象,再将对象moveToThread, 这种可以充分利用信号槽机制ÿ…...

安卓逆向案例——X酷APP逆向分析
X酷APP逆向分析 这里介绍一下两种不同的挂载证书的方法。 chls.pro/ssl无法在浏览器中下载证书是什么原因解决方法: 法一 1. 挂载系统分区为读写 使用正确的挂载点来挂载系统分区为读写: su mount -o remount,rw /dev/uijISjR/.magisk/block/syste…...

创新案例|星巴克中国市场创新之路: 2025目标9000家店的挑战与策略
星巴克创始人霍华德舒尔茨:“为迎接中国市场的全面消费复苏,星巴克2025年推进9000家门店计划,将外卖、电商以及家享和外出场景咖啡业务纳入中国新一轮增长计划中。”在面临中国市场同店增长大幅下滑29%背景下,星巴克通过DTC用户体…...

计算机网络 MAC地址表管理
一、理论知识 1.MAC地址表:交换机使用MAC地址表来记录各MAC地址对应的端口,用于帧转发的目的。 2.老化机制:交换机会为每一条MAC地址表项设置老化时间,老化时间到期后未收到该MAC地址报文的表项将被删除,释放资源。 …...

【免费API推荐】:各类API资源免费获取【11】
欢迎来到各类API资源的免费获取世界!幂简集成为您提供了一个集合了各种免费API接口的平台。无论您是开发者、数据分析师还是创业者,都可以通过我们的平台轻松免费获取所需的API资源。幂简精心整理了各类API接口,涵盖了不同领域的需求…...

技术驱动会展:展位导航系统的架构与实现
随着会展行业的快速发展,大型会展中心面临着如何提升参展者体验、提高招商效率的挑战。针对客户反馈的展馆面积大、展位查找困难等问题,维小帮提出一套智慧会展导航解决方案,旨在通过先进的室内导航技术提升会展中心的运营效率和参展者的满意…...

适用于轨道交通专用的板卡式网管型工业以太网交换机
是网管型 CompactPCI板卡式冗余环网交换机。前面板带有6个 10/100/1000Base-T(X)M12接口。后面的CPCI接口有 8个10/100/1000Base-T (X) 以太网接口。 是特别为轨道交通行业EN50155标准要求而设计的坚固型交换机。它同时具有以下特性: ● 支持2线以太网距离扩展端口&…...

excel基本操作
excel 若要取消在数据表中进行的所有筛选 步骤操作: 单击“数据”选项卡。在“排序和筛选”组中,找到“清除”按钮。点击“清除”按钮。 图例: 将文本文件的数据导入到Excel工作表中进行数据处理 步骤: 在Excel中,…...
C++系统相关操作2 - 获取系统环境变量
1. 关键词2. sysutil.h3. sysutil.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 C 系统调用 环境变量 getenv 跨平台 2. sysutil.h #pragma once#include <cstdint> #include <string>namespace cutl {/*** brief Get an environment variable.** param na…...

适合小白学习的项目1906java Web智慧食堂管理系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目
一、源码特点 java Web智慧食堂管理系统是一套完善的信息管理系统,结合java 开发技术和bootstrap完成本系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 前段主要技术 bootstra…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...