《算法闯关指南:优选算法--模拟》--41.Z 字形变换,42.外观数列

《算法闯关指南:优选算法--模拟》--41.Z 字形变换,42.外观数列
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。

41. 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++算法代码:

classSolution{public: string convert(string s,int numRows){if(numRows==1)return s; string ret;int d=2*numRows-2,n=s.size();//1.处理第一行for(int i=0;i<n;i+=d) ret+=s[i];//2.处理中间的几行for(int k=1;k<numRows-1;k++){for(int i=k,j=d-k;i<n||j<n;i+=d,j+=d){if(i<n) ret+=s[i];if(j<n) ret+=s[j];}}//3.处理最后一行for(int i=numRows-1;i<n;i+=d) ret+=s[i];return ret;}};

算法总结&&笔记展示:

笔记字有点丑,大家见谅:

在这里插入图片描述


在这里插入图片描述

42. 外观数列

题目链接

38. 外观数列 - 力扣(LeetCode)

题目描述:

在这里插入图片描述


题目示例:

在这里插入图片描述


在这里插入图片描述

解法(模拟):

算法思路:

所谓【外观数列】,其中只是依次统计字符串中连续且相同的字符的个数。依据题意,依次模拟即可。

C++算法代码:

classSolution{public: string countAndSay(int n){ string ret="1";for(int i=1;i<n;i++)// 解释 n - 1 次 ret 即可{ string tmp;for(int left=0,right=0,count=0;right<ret.size();){while(right<ret.size()&&ret[left]==ret[right]) right++; tmp+=to_string(right-left)+ret[left]; left=right;} ret=tmp;}return ret;}};

算法总结&&笔记展示:

笔记字有点丑,大家见谅:

在这里插入图片描述


在这里插入图片描述

结尾:

🍓 我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点: 👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用 💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑 🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解 技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标! 

结语:本文精选了两道经典算法题进行解析: Z字形变换:通过模拟和找规律,将字符串按Z字形排列后逐行读取。核心思路是识别以2*numRows-2为周期的下标规律,分首行、中间行和末行处理。 外观数列:模拟统计连续相同字符的个数并生成新字符串。通过双指针计数,迭代n-1次得到结果。 笔记展示了手写解题思路和关键公式推导。

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど

Read more

Git 提交信息的规范化简写格式

Git 提交信息的规范化简写格式

你想了解的是 Git 提交信息的规范化简写格式(也常被称为 Conventional Commits 规范),除了 feat、fix、refactor 之外,还有很多不同类型的前缀可以让提交信息更清晰、更有语义。 完整的规范提交前缀及含义 以下是业界通用的 Conventional Commits 规范中常用的前缀,按使用场景分类,每个前缀都有明确的语义: 前缀中文含义使用场景举例feat新增功能feat: 新增商品详情页分享功能fix修复 Bugfix: 修复移动端下拉刷新数据重复的问题refactor代码重构(无功能变更)refactor: 重构订单列表组件,优化代码结构docs文档修改docs: 更新 README 中的接口使用说明style代码格式调整(无逻辑变更)style: 格式化代码缩进,修正变量命名规范test测试相关test: 为用户登录接口添加单元测试chore琐碎工作(构建/工具等)chore: 升级依赖包 axios 到 1.6.0 版本perf性能优化perf: 优化商品列表查询 SQL,提升接口响应速度build构建相关(

By Ne0inhk
Chaterm — 开源SRE副驾驶,让你与服务器直接对话!

Chaterm — 开源SRE副驾驶,让你与服务器直接对话!

Chaterm 是一款开源AI智能终端和SSH客户端。Chaterm旨在解决大规模云环境下服务器批量化操作、故障排查复杂和安全管控困难等痛点。它将 AI Agent能力嵌入终端,通过打造“对话式终端管理工具”,帮助服务端开发者、DEVOPS工程师、云计算从业人士实现云资源的智能化和规模化管理。 图说:Chaterm的核心能力包括:命令语法高亮,关键词高亮,智能命令补全,零信任安全连接,Agent智能智能代理,移动端语音输入控制,MCP功能,Agent Skills等 AI 智能助手:让运维更简单:Chaterm不仅提供 AI 对话和终端命令执行功能,更具备基于 Agent 的 AI 自动化能力,可以通过自然语言设定目标,由 AI 自动规划,并一步一步执行,最终达成需要完成的任务。 1. 智能命令生成:说出你的需求,AI 自动生成对应的 Shell 命令 2. 上下文理解:AI

By Ne0inhk
Linux系统Docker部署开源在线协作笔记Trilium Notes与远程访问详细教程

Linux系统Docker部署开源在线协作笔记Trilium Notes与远程访问详细教程

目录 ⛳️推荐 前言 1. 安装docker与docker-compose 2. 启动容器运行镜像 3. 本地访问测试 4.安装内网穿透 5. 创建公网地址 6. 创建固定公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 前言 今天和大家分享一款在G站获得了26K+的强大的开源在线协作笔记软件,Trilium Notes的中文版如何在Linux环境使用docker本地部署,并结合cpolar内网穿透工具配置公网地址,轻松实现远程在线协作的详细教程。 Trilium Notes是一个层次化的笔记应用程序,专注于建立大型个人知识库。 主要功能如下: * 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅克隆) * 丰富的所见即所得笔记编辑功能,包括带有 Markdown 自动格式化功能的表格,图像和数学 * 支持编辑使用源代码的笔记,包括语法高亮显示 * 笔记之间快速导航,全文搜索和笔记聚焦 * 无缝笔记版本控制 * 笔记属性可用于笔记组织,查询和高级脚本

By Ne0inhk