《算法闯关指南:优选算法--模拟》--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

Java后端开发神器:飞算JavaAI让我从菜鸟变高手

Java后端开发神器:飞算JavaAI让我从菜鸟变高手

目录 前言 一、飞算JavaAI的核心理念 二、核心功能深度剖析 2.1 智能分析读懂你的"老项目" 2.2 自定义AI规则 2.3 引导式开发与模块化生成 三、用飞算JavaAI实战演练 3.1 飞算JavaAI的安装和登录 3.2 分析现有项目 3.3 测试为项目增加新功能 四、其他亮点功能一览 五、谁会使用飞算JavaAI?它将如何改变开发生态? 全文总结  🎬 攻城狮7号:个人主页 🔥 个人专栏:《AI前沿技术要闻》 ⛺️ 君子慎独!  🌈 大家好,欢迎来访我的博客! ⛳️ 此篇文章主要介绍 AI编程工具飞算JavaAI 📚 本期文章收录在《AI前沿技术要闻》,大家有兴趣可以自行查看! ⛺️ 欢迎各位 ✔️ 点赞 👍 收藏

By Ne0inhk
JAVA项目实战:用飞算 JavaAI 高效开发电商系统核心功能模块

JAVA项目实战:用飞算 JavaAI 高效开发电商系统核心功能模块

JAVA项目实战:用飞算 JavaAI 高效开发电商系统核心功能模块 * 一、前言 * 二、飞算JavaAI使用 * 三、需求分析与规划 * (一)功能需求 * (二)核心模块 * (三)技术选型 * 四、飞算JavaAI开发实录 * (一)初始化项目 * (二)商品管理模块开发 * (三)订单模块开发 * (四)用户中心模块开发 * 五、优化与调试心得 * (一)遇到的问题及解决 * (二)飞算JavaAI其他功能利用 * 六、成果展示与总结 * (一)工程结构图 * (二)核心代码片段 * (三)飞算JavaAI使用体会 * 七、总结评价 * 结束语 JAVA项目实战:用飞算 JavaAI 高效开发电商系统核心功能模块。本文围绕用飞算 JavaAI 开发电商系统核心功能模块展开。

By Ne0inhk
使用飞算JavaAI实现在线图书借阅平台

使用飞算JavaAI实现在线图书借阅平台

标签<JavaAI> 在软件开发领域,寻找高效的开发工具一直是开发者的追求。飞算 JavaAI 作为一款新兴的 AI 辅助开发工具,宣称能实现从需求分析到代码生成的高效流程。本次,我选择使用飞算 JavaAI 开发在线图书借阅平台,并将生成的项目转换为 SpringBoot 项目,沉浸式体验其在实际开发中的表现,同时对比同类产品,探索它在开发效率、代码质量等方面的优势与不足。 一、飞算 JavaAI 操作流程全记录 (一)需求分析与功能拆解 在线图书借阅平台需要满足多方面的功能需求,包括用户管理(注册、登录、个人信息维护、权限控制)、图书资源管理(信息录入、分类、搜索、展示)、借阅管理(申请、审批、记录追踪)、归还管理(归还处理、逾期提醒、罚款计算)、预约管理(预约图书、

By Ne0inhk

Java Web 开发学习Day2 数据库知识复习与整理(黑马程序员网课知识总结)

引言: web开发调用流程 * SQL(Structured Query Language,简称SQL):结构化查询语言,它是操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。 * 程序员给数据库管理系统(DBMS)发送SQL语句,再由数据库管理系统操作数据库当中的数据。 1. MySQL概述 2. SQL语句(DDL、DML、DQL) 3. 多表设计 4. 多表查询 5. 事务 6.  索引 1.MySQL概述 1.1安装(省略) 1.2连接 MySQL服务器启动完毕后,然后再使用如下指令,来连接MySQL服务器: mysql -u用户名 -p密码 [-h数据库服务器的IP地址 -P端口号] * -h 参数不加,默认连接的是本地 127.0.0.

By Ne0inhk