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

OpenSpiel进阶教程:用C++与Python实现自定义博弈算法

OpenSpiel进阶教程:用C++与Python实现自定义博弈算法 【免费下载链接】open_spielOpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. 项目地址: https://gitcode.com/gh_mirrors/op/open_spiel OpenSpiel是一个强大的博弈算法研究框架,提供了丰富的环境和算法支持。本文将带你深入了解如何在OpenSpiel中使用C++和Python实现自定义博弈算法,从基础架构到实际代码示例,助你快速掌握博弈算法开发技巧。 🎮 自定义博弈算法的核心架构 在开始编写代码前,我们需要理解OpenSpiel中博弈算法的基本架构。OpenSpiel将博弈问题抽象为信息状态(Information State) 和策略(Policy) 的交互,算法通过优化策略来最大化预期收益。 图1:

By Ne0inhk
基于 ONNX Runtime 的 YOLOv8 高性能 C++ 推理实现

基于 ONNX Runtime 的 YOLOv8 高性能 C++ 推理实现

目录 一、项目背景 二、代码讲解 1. inference.cpp注释版代码: 2. inference.cpp代码框架讲解: (1)整体思路 (2)文件头与杂项 (3)BlobFromImage(Mat → NCHW 浮点数组) (4)PreProcess(根据模型类型做图像预处理) (5)CreateSession(会话创建与参数) (6)RunSession(一次完整推理) (7)TensorProcess(核心:Run + 解码输出) (8)WarmUpSession(预热) (9)关键参数/结构 3. inference.h代码: 4. main.cpp注释版代码: 三、环境配置 1. CPU

By Ne0inhk

使用C++进行NX二次开发UI控件嵌入实战

让NX更“听话”:用C++把自定义控件嵌进Siemens NX原生界面的实战之路 你有没有遇到过这样的场景? 在使用 Siemens NX 做复杂结构设计时,反复点击菜单、填参数、确认,流程繁琐得像在走迷宫;而企业内部积累的设计规范和经验知识,却只能靠Excel文档或口头传授来传递。明明是高端CAD平台,却像个“高智商但不会说话”的工具人。 这时候,你会不会想: 能不能直接在NX界面上加个按钮,一点就自动完成整套操作? 答案是—— 完全可以 。而且,如果你懂C++,这条路不仅走得通,还能走得非常稳。 本文不讲空泛概念,也不堆砌API列表。我们要做的是: 手把手带你把一个真正的Win32按钮,嵌入到NX主窗口里,并让它能调用建模功能、响应用户交互、安全释放资源 。这是一篇面向实战的深度技术笔记,适合那些已经熟悉NX Open基础、正试图突破UI定制瓶颈的开发者。 为什么标准对话框不够用了? 先说清楚一个问题:NX本身提供了 UIStyler 和 .NET API 等方式创建自定义界面。

By Ne0inhk
工业相机高速回调 + 异步处理线程:海康 C++ 实战代码深度解析

工业相机高速回调 + 异步处理线程:海康 C++ 实战代码深度解析

工业相机高速回调 + 异步处理线程:海康 C++ 实战代码深度解析 导读:在锂电池极片飞拍、半导体晶圆检测等高速视觉场景中,“相机能跑 90fps,一存图就掉到 20fps”是许多工程师的噩梦。C++ 虽然性能强劲,但若架构设计不当,同样难逃丢帧、内存泄漏的厄运。本文将基于生产者 - 消费者模型 + 环形缓冲队列的核心思想,为你打造一套C++ 版本的高速图像存储方案,并附带海康威视(Hikvision)MVS SDK 的实战代码,助你轻松扛住 4K@60fps 连续写入! 一、痛点直击:为什么你的高速相机总丢帧? 在工业视觉系统中,图像数据流如同洪流: * 带宽巨大:4K@60fps RAW 图像带宽高达 1.8GB/s; * I/O 瓶颈:普通

By Ne0inhk