《算法题讲解指南:优选算法-模拟》--38.替换所有问号,39.提莫攻击,40.Z 字形变换

《算法题讲解指南:优选算法-模拟》--38.替换所有问号,39.提莫攻击,40.Z 字形变换

🔥小叶-duck个人主页

❄️个人专栏《Data-Structure-Learning》

《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心

未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游


目录

38.替换所有问号

题目链接:

题目描述:

题目示例:

解法(模拟):

算法思路:

C++算法代码:

算法总结及流程解析:

39.提莫攻击

题目链接:

题目描述:

题目示例:

解法(模拟+分情况讨论):

算法思路:

C++算法代码:

算法总结及流程解析:

40.Z 字形变换

题目链接:

题目描述:

题目示例:

解法(模拟+找规律):

算法思路:

C++算法代码:

算法总结及流程解析:

结束语


38.替换所有问号

题目链接:

1576. 替换所有的问号 - 力扣(LeetCode)

题目描述:

题目示例:

解法(模拟):

算法思路:

      就是模拟这个过程就行。从前往后遍历整个字符串,找到问号之后,就用 a~z 的每一个字符去尝试替换即可。 

C++算法代码:

class Solution { public: string modifyString(string s) { for(int i = 0; i < s.size(); i++) { if(s[i] == '?') { for(char c = 'a'; c <= 'z'; c++) { if((i == 0 || s[i - 1] != c) && (i == s.size() - 1 || s[i + 1] != c)) { s[i] = c; break; } } } } return s; } };

算法总结及流程解析:

39.提莫攻击

题目链接:

495. 提莫攻击 - 力扣(LeetCode)

题目描述:

题目示例:

解法(模拟+分情况讨论):

算法思路:

      模拟+分情况讨论。
      计算相邻两个时间点的差值:

  • 如果差值大于等于中毒时间,说明上次中毒可以持续 duration 秒。
  • 如果差值小于中毒时间,那么上次的中毒只能持续两者的差值

      还可以这样想,我们每次加上 min(duration,差值) 就行。

C++算法代码:

class Solution { public: int findPoisonedDuration(vector<int>& timeSeries, int duration) { int sum = 0; for(int i = 0; i < timeSeries.size() - 1; i++) { // if(timeSeries[i + 1] - timeSeries[i] >= duration) // { // sum += duration; // } // else // { // sum += timeSeries[i + 1] - timeSeries[i]; // } sum += min(timeSeries[i + 1] - timeSeries[i], duration); } sum += duration; return sum; } };

算法总结及流程解析:

40.Z 字形变换

题目链接:

6. Z 字形变换 - 力扣(LeetCode)

题目描述:

题目示例:

解法(模拟+找规律):

算法思路:

      找规律,用 row 代替行数,row = 4 时画出的 N 字形如下:
0 2row - 2 4row - 4
1 2row - 3 2row - 1 4row - 5 4row - 3
2 2row-4 2row 4row - 6 4row - 2
3 2row + 1 4row - 1

      不难发现,数据是以 2row - 2 为⼀个周期进行规律变换的。将所有数替换成用周期来表示的变量:
第一行的数是:0, 2row - 2, 4row - 4;
第二行的数是:1, (2row - 2) - 1, (2row - 2) + 1, (4row - 4) - 1, (4row - 4) + 1;
第三行的数是:2, (2row - 2) - 2, (2row - 2) + 2, (4row - 4) - 2, (4row - 4) + 2;
第四行的数是:3, (2row - 2) + 3, (4row - 4) + 3。

      可以观察到,第一行、第四行为差为 2row - 2 的等差数列;第二行、第三行除了第⼀个数取值为行数,每组下标为(2n - 1, 2n)的数围绕(2row - 2)的倍数左右取值。
      以此规律,我们可以写出迭代算法。

C++算法代码:

class Solution { public: string convert(string s, int numRows) { // string ret; // int d = 2 * numRows - 2; // if(d == 0) // { // return s; // } // for(int i = 0; i < numRows; i++) // { // int j = i; // int flag = 0; // if(i == numRows - 1) // { // flag = 1; // } // while(j < s.size()) // { // ret.push_back(s[j]); // if(flag == 0) // { // j += (d - 2 * i); // if(i != 0) // { // flag = 1; // } // } // else // { // j += (2 * i); // if(i != numRows - 1) // { // flag = 0; // } // } // } // } // return ret; //代码优化: string ret; int d = 2 * numRows - 2; if(d == 0) { return s; } //1、处理第一行 for(int i = 0; i < s.size(); i += d) { ret.push_back(s[i]); } //2、处理中间行 for(int k = 1; k < numRows - 1; k++)//枚举中间每一行 { for(int i = k, j = d - k; i < s.size() || j < s.size(); i += d, j += d) //这里用或是保证一行全部遍历完再到下一行,避免漏掉 { //由于是或,所以可能出现其中一个越界的情况,需要判断 if(i < s.size()) { ret.push_back(s[i]); } if(j < s.size()) { ret.push_back(s[j]); } } } //3、处理最后一行 for(int i = numRows - 1; i < s.size(); i += d) { ret.push_back(s[i]); } return ret; } };

算法总结及流程解析:

结束语

      到此,38.替换所有问号,39.提莫攻击,40.Z 字形变换 这三道算法题就讲解完了。替换所有问号(1576题):通过遍历字符串,对每个问号使用a-z字符尝试替换,确保不与前后字符重复。提莫攻击(495题):计算中毒总时间,通过比较相邻攻击时间差与中毒持续时间,取较小值累加。Z字形变换(6题):通过模拟和找规律,将字符串按Z字形排列后逐行读取。核心思路是识别以2*numRows-2为周期的下标规律,分首行、中间行和末行处理。 希望大家能有所收获!

Read more

保姆级教程!零基础解锁大疆无人机开发:MSDK/PSDK/ 上云 API 实战指南[特殊字符]

保姆级教程!零基础解锁大疆无人机开发:MSDK/PSDK/ 上云 API 实战指南[特殊字符]

保姆级教程!零基础解锁大疆无人机开发:MSDK/PSDK/上云API实战指南🚁 摘要 作为无人机领域的「苹果生态」,大疆行业开发体系自2014年开放SDK以来,已吸引超10万开发者构建3000+行业解决方案。本文基于官方最新《行业生态入门指南》,深度解析MSDK移动端开发、PSDK负载硬件开发、上云API云端集成三大核心能力,附全流程资源清单与生态认证攻略,助你从「无人机小白」变身行业开发高手! 目录 * 一、大疆开发生态全景:为什么选择大疆二次开发? * 二、MSDK实战:5分钟开发你的首个无人机控制App * 三、PSDK硬核:让无人机秒变「万能挂载平台」 * 四、上云API进阶:构建无人机云端大脑 * 五、开发者必备:技术支持与生态认证全流程 一、大疆开发生态全景:为什么选择大疆二次开发? 🌟 生态优势 * 低门槛:无需自研飞控算法,直接调用大疆底层能力(如飞行稳定、图传通信); * 高兼容:支持Matrice 350 RTK、

By Ne0inhk

openclaw多Agent和多飞书机器人配置

增加Agent多个飞书机器人 一个Agent尽量只用一个飞书机器人配置 一:先增加新的agent # 创建新的Agent,命名为new-agnet openclaw agents add new-agnet # 查看创建结果 openclaw agents list 二:新的agent与新的飞书链接 配置agnet下的channels: 在命令行输入 # 配置new-agnet机器人(替换为实际App ID和App Secret) openclaw config set agents.new-agnet.channels.feishu.appId "你的new-agnet 飞书 App ID" openclaw config set agents.new-agnet.channels.feishu.appSecret "你的new-agnet 飞书 App Secret"

By Ne0inhk
【CANN】Pi0机器人大模型 × 昇腾A2 测评

【CANN】Pi0机器人大模型 × 昇腾A2 测评

【CANN】Pi0机器人大模型 × 昇腾A2 测评 * 写在最前面 🌈你好呀!我是 是Yu欸🚀 感谢你的陪伴与支持~ 欢迎添加文末好友🌌 在所有感兴趣的领域扩展知识,不定期掉落福利资讯(*^▽^*) 写在最前面 版权声明:本文为原创,遵循 CC 4.0 BY-SA 协议。转载请注明出处。 Pi0机器人VLA大模型测评 哈喽大家好呀!我是 是Yu欸。 最近人形机器人和具身智能真的太火了,大家都在聊 Pi0、聊 VLA 大模型。但是,兄弟们,不管是搞科研还是做落地,咱们始终绕不开一个问题——算力。 今天,我们一起把当下最火的 Pi0 机器人视觉-语言-动作大模型,完完整整地部署在国产算力平台上,也就是华为的昇腾 Atlas 800I A2 服务器上。 在跑通仓库模型的基础上,我们做一次性能测评。 我们要测三个最核心的指标:

By Ne0inhk
零代码上手!用 Rokid 灵珠平台,5 步搭建专属旅游 AR 智能体

零代码上手!用 Rokid 灵珠平台,5 步搭建专属旅游 AR 智能体

零代码上手!用 Rokid 灵珠平台,5 步搭建专属旅游 AR 智能体 灵珠平台简介 okid 自研 AI 开发平台,基于多模态大模型与轻量化架构,打造零门槛、全栈化 AI 开发体系。平台提供可视化编排、预置能力组件,支持原型到云端、端侧一站式敏捷部署,并深度适配 Rokid Glasses 智能眼镜,通过专属硬件接口与低功耗优化,实现 AI 应用高效端侧落地,助力开发者快速打造视觉识别、语音交互等穿戴式 AI 应用,拓展 AI + 物理世界的交互边界可视化编排工具,拖拽式快速搭建应用预置丰富能力组件库,涵盖对话引擎、视觉识别等核心模块支持从原型设计到云端、端侧的一站式敏捷部署提供设备专属适配接口,实现硬件深度协同搭载低功耗运行优化方案,保障端侧持久稳定运行 实战:搭建旅游类AR智能体 1、进入灵珠平台 登录灵珠平台后,你将看到简洁直观的工作台界面 点击创建智能体按钮,

By Ne0inhk