LeetCode --- 411周赛

题目列表

3258. 统计满足 K 约束的子字符串数量 I

3259. 超级饮料的最大强化能量

3260. 找出最大的 N 位 K 回文数

3261. 统计满足 K 约束的子字符串数量 II

一、统计满足K约束的子字符串数量I

这种要求满足区间内某种性质的题,一般都可以用滑动窗口来做。这题也是同理,我们的思路是用滑动窗口来维护以 r 为右端点的满足题目区间性质的最长子字符串,然后统计答案即可,代码如下

class Solution {
public:int countKConstraintSubstrings(string s, int k) {int n = s.size(), ans = 0;int cnt[2]{};for(int l = 0, r = 0; r < n; r++){cnt[s[r]-'0']++;while(cnt[0] > k && cnt[1] > k){cnt[s[l]-'0']--;l++;}ans += r - l + 1; // 统计以 r 为右端点的满足要求的子串个数}return ans;}
};

二、超级饮料的最大强化能量

这题和打家劫舍很相似。本题要求如果切换饮料要么需要有一个小时等待时间,本质就是不能相邻时间饮用不同的饮料,我们可以定义f[i]表示第 i 小时喝饮料A的最大能量,g[i]表示第 i 小时喝饮料B的最大能量,对于 f[i] 来说,它可以选择不切换饮料,从f[i-1]转移来,也可以选择谢欢饮料,从g[i-2]转移来,故转移方程为 f[i] = max(f[i-1],g[i-2]) + a[i],同理,g[i] = max(g[i-1],f[i-2]) + b[i]。为了防止下标越界,我们需要初始化。代码如下

class Solution {using LL = long long;
public:long long maxEnergyBoost(vector<int>& a, vector<int>& b) {int n = a.size();// f[i] 表示第 i 小时喝a饮料的最大能量// g[i] 表示第 i 小时喝b饮料的最大能量// f[i] = max(f[i-1], g[i-2]) + a[i]// g[i] = max(g[i-1], f[i-2]) + a[i]vector<LL> f(n + 2), g(n + 2);for(int i = 0; i < n; i++){f[i+2] = max(f[i+1], g[i]) + a[i];g[i+2] = max(g[i+1], f[i]) + b[i];}return max(f.back(), g.back());}
};

三、找出最大的N位K回文数

一般的想法就是去构造,由于回文数是中心对称的,所以我们只要枚举一半的数位填什么,就能知道整个回文数是多少,其次,由于题目只要求能被 k 整除的最大的n位回文数,所以我们贪心的让每一位都从 9 到 0 的顺序进行枚举,我们构造出的第一个满足条件的回文数就是最大的,我们可以直接返回true表示找到了一个合法的回文数,为了判断构造的回文数是否符合条件,我们还需要一个参数来记录 % k 的结果。

这题的关键在于如何进行取模?因为位数n太大会导致数据越界,我们计算出整个数之后再进行取模是不可取的,那么该如何做呢?根据取模的性质,(a+b)%k = ((a%k) + (b%k))%k,我们可以提前预处理得到每个位上的数 % k 的结果。

比如说800 % k = (100 % k + ... + 100%k)%k = (8 * 100 % k) % k,我们可以先计算出 10^i % k的结果,再结合枚举的数计算整体 % k 的值,这样就不会越界了,代码如下

class Solution {
public:string largestPalindrome(int n, int k) {vector<int> pow10(n);pow10[0] = 1;for (int i = 1; i < n; i++) {pow10[i] = pow10[i - 1] * 10 % k;}string ans(n, '0');int m = (n + 1) / 2;vector<vector<bool>> vis(m + 1, vector<bool>(k));auto dfs = [&](auto&& dfs, int i, int j) -> bool {if (i == m) {return j == 0;}vis[i][j] = true;for (int d = 9; d >= 0; d--) { // 贪心:从大到小枚举int j2;if (n % 2 && i == m - 1) { // 正中间j2 = (j + d * pow10[i]) % k;} else {j2 = (j + d * (pow10[i] + pow10[n - 1 - i])) % k;}if (!vis[i + 1][j2] && dfs(dfs, i + 1, j2)) {ans[i] = ans[n - 1 - i] = '0' + d;return true;}}return false;};dfs(dfs, 0, 0);return ans;}
};

四、统计满足K约束的子字符串数量II

和第一题相比,第四题有多次查询需要处理,如何处理?

我们可以通过第一题的思路去尝试发现一些规律来帮助我们解决问题,首先,我们能知道每一个右端点都对应着一个左端点left,使得它的之间的长度最长,其次这些左端点的位置还是单调增的,因为滑动窗口一直在往右移动。

下面结合一个示例来帮助我们找到规律

代码如下

class Solution {using LL = long long;
public:vector<long long> countKConstraintSubstrings(string s, int k, vector<vector<int>>& q) {int n = s.size();vector<int>left(n);vector<LL> pre(n+1);int cnt[2]{};for(int l = 0, r = 0; r < n; r++){cnt[s[r] - '0']++;while(cnt[0] > k && cnt[1] > k){cnt[s[l] - '0']--;l++;}left[r] = l;pre[r+1] = pre[r] + r - l + 1;}vector<LL> ans(q.size());for(int i = 0; i < q.size(); i++){int l = q[i][0], r = q[i][1];int j = lower_bound(left.begin() + l, left.begin() + r + 1, l + 1) - left.begin(); // left[j] > lans[i] = (long long)(j - l + 1) * (j - l) / 2 + pre[r+1] - pre[j];}return ans;}
};

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

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

相关文章

黄河:曾月入十几万,被裁后做独立开发,我每天必须要做的事就是写代码

这是《开发者说》的第16期&#xff0c;本期我们邀请的开发者是黄河&#xff0c;来自西北城市银川&#xff0c;半路转行为程序员&#xff0c;靠着自己对编程的热爱&#xff0c;一路坚持下来&#xff0c;虽地处偏远&#xff0c;正是得益于互联网的好处&#xff0c;让全球每一个角…

畅捷通CRM newleadset.php SQL注入漏洞复现

0x01 产品简介 用友畅捷通CRM是面向小企业全力打造的简单、实用的客户关系管理应用。帮助企业用好自己的客户资源、管好商机跟进过程、引导好业务员跟单行为,促进团队销售能力的提升;通过查询和分析,识别企业的价值客户,融合电话、短信、邮件等工具,实现精准营销;帮助企…

网络安全之渗透测试实战-DC-3-靶机入侵

一、下载靶机DC-3&#xff0c;解压后导入Vmware Workstation https://pan.baidu.com/s/17BcSH6RqC7wuyB7PRNqOow?pwdkc12启动DC-3靶机&#xff0c;由于不知道密码&#xff0c;无需登录 二、靶机的网卡采用的是NAT模式自动获取IP地址&#xff0c;此时我们需要先获取其MAC地址…

Qt:鼠标事件

虽然Qt是跨平台的c开发框架&#xff0c;但是Qt的很多能力是系统提供的&#xff0c;只是其封装了系统的API&#xff0c;例如在Linux环境下的Qt就封装了Linux的一堆API 系统API 事件&#xff1a;图形化界面中&#xff0c;用户操作和程序之间交互的机制&#xff08;封装了系统的事…

机器学习:DBSCAN算法(内有精彩动图)

目录 前言 一、DBSCAN算法 1.动图展示&#xff08;图片转载自网络&#xff09; 2.步骤详解 3.参数配置 二、代码实现 1.完整代码 2.代码详解 1.导入数据 2.通过循环确定参数最佳值 总结 前言 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications w…

探索数据结构:图(三)之最短路径算法

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 最短路径算法 最短路径问题可分为单源最短路径和多源最短路径。其指…

《机器学习》 SVM支持向量机 推导、参数解析、可视化实现

目录 一、SVM支持向量机 1、什么是SVM 例如&#xff1a; 2、SVM的主要特点是&#xff1a; 二、SVM方程 1、超平面方程 2、标签问题 3、决策函数&#xff1a; 符号函数&#xff1a; 整合&#xff1a; 4、距离问题 1&#xff09;点到直线距离 2&#xff09;点到平面…

航空公司名字趣史:看看有趣又有意义的命名背后有什么玄机

上周“东海航空”事件引发了东方航空在社交媒体上的一系列被迫营业&#xff0c;因为媒体的乌龙报道误将“东海航空”简称为“东航”&#xff0c;甚至直接用错了图片。众号&#xff1a;标猿公司起名 给公司起个好名字 其实除了大部分以地域、国家命名的航空公司&#xff0c;还…

Android Auto推出全新Google助手设计

智能手机与汽车的无缝整合已成为现代驾驶的重要组成部分&#xff0c;而 Android Auto 一直在这一领域处于领先地位。谷歌通过不断推出新功能和更新&#xff0c;体现了其致力于提升 Android Auto 体验的决心。最近&#xff0c;Android Auto 引入了 Google助手的全新设计。 当系…

【Qt】多元素控件QTreeWidget

多元素控件QTreeWidget 使用QTreeWidget表示一个树型结构&#xff0c;里面的每一个元素都是QTreeWidgetItem&#xff0c;每个QTreeWidgetItem可以包含多个文本和图标&#xff0c;每个文本/图标表示一列。 可以给QTreeWidget设置顶层结构&#xff08;顶层节点可以有多个&#…

redis面试(二十二)读锁释放

假设现在已经有各种锁的重入什么的&#xff0c;那如何释放锁&#xff1f; 读锁读锁 假如说&#xff0c;同一个线程多次加读锁&#xff0c;或者不同的线程加了多个读锁 当前的锁结构长这样 anyLock: { “mode”: “read”, “UUID_01:threadId_01”: 2, “UUID_02:threadId_02…

去雾去雨算法

简单版 import cv2 import numpy as npdef dehaze(image):"""简单去雾算法&#xff0c;使用直方图均衡化来增强图像"""# 将图像转换为YUV颜色空间yuv_image cv2.cvtColor(image, cv2.COLOR_BGR2YUV)# 对Y通道&#xff08;亮度&#xff09;进行…

数据结构——队的基本操作

一、顺序队 队的用法&#xff1a;先进先出 跟平时我们遇到的大多情况一样&#xff0c;队的主要思想就是先进先出&#xff0c;比如我去食堂打饭&#xff0c;我先排那么就是我先打到饭咯 顺序队&#xff1a;其实说白了就是一块空间用两个指针去指向&#xff0c;为了实现先进先…

C语言指针重学

学习要纲:建议掌握 gdb调试(b ,d ,fin ,bt ,print ,awatch ,up ,down ,set pretty等) SourceInsight软件看代码(全局搜索 文件搜索等) git如何调取分支合并(git branch,git blame,git log,git pull,git reset --hard等) 等内容,下面是对于指针的一个重新学习. C语言的指针&…

AI工具 GPT 学术优化 (GPT Academic) 安装实践

GPT 学术优化 (GPT Academic)是一个综合的AI GPT工具包&#xff0c;可以完成各种gpt辅助的工作&#xff0c;比如代码解读、翻译、读论文等功能。官网&#xff1a;GitHub - binary-husky/gpt_academic: 为GPT/GLM等LLM大语言模型提供实用化交互接口&#xff0c;特别优化论文阅读…

2024年中国运筹学会运筹竞赛(数据驱动赛道)报名通知

竞赛组织 主办单位&#xff1a;中国运筹学会&#xff08;国家一级学会&#xff09; 承办单位&#xff1a;中国科学技术大学 支持单位&#xff1a;杉数科技、海康威视、中国科学技术大学管理学院、《运筹学学报》杂志 竞赛内容 本次竞赛&#xff08;本科生组&#xff09;由竞…

BOSS直聘财报:2024年第二季度净利润4.17亿元,同比上涨34.8%

8月28日美股盘前&#xff0c;BOSS直聘&#xff08;NASDAQ:BZ,HK:2076&#xff09;发布了2024年第二季度财报。在第二季度&#xff0c;公司经营效率不断提升&#xff0c;非通用会计准则下&#xff0c;取得净利润4.17亿元&#xff0c;同比上涨34.8%。 第二季度&#xff0c;公司持…

实习结束总结20240828

长达两个月的实习终于在今天结束了&#xff0c;不知怎的&#xff0c;心如止水&#xff0c;没有高兴&#xff0c;没有伤心&#xff0c;毫无波澜的内心甚至让自己都感觉可怕&#xff0c;也许&#xff0c;这就是成长吧。 硬件上&#xff1a; 1.cadence需要继续深入学习&#xff…

深圳保障房、商品房、小产权房子类型对比

摘要&#xff1a; 整理了我认知以内的深圳房子类型&#xff0c;有安居房&#xff0c;可售人才房&#xff0c;共有产权房、配售型保障房、商品房、统建楼、农民房的区别。如果数据存疑&#xff0c;可以多方对比论证&#xff0c;我也主要靠百度。 我发现我很多同事是非深户&#…

JS WebSocket 深度解析

JS WebSocket 深度解析 文章目录 JavaScript WebSocket 深度解析一、WebSocket 是什么二、JS 中如何使用 WebSocket1. 创建 WebSocket 对象2. 连接打开事件3. 监听消息事件4. 监听错误事件5. 关闭连接 三、WebSocket 包含哪些属性或方法 API1. 属性2. 方法 四、扩展与高级技巧1…