【C/C++算法】从浅到深学习--- 简单模拟算法(图文兼备 + 源码详解)

绪论:冲击蓝桥杯一起加油!!
在这里插入图片描述
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry”

绪论​:
本篇是一些简单的模拟算法,其中模拟的本质就是就是根据题目意思进行代码的实现,因为本质较为简单所以本章分析也较少,将会通过 5 题进行模拟算法的认识。
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。


模拟算法:

比葫芦画瓢
特点:

  1. 思路比较简单
  2. 考察代码能力

流畅:

  1. 模拟算法流程(一定不要空想,而是要草稿纸上过流程)
  2. 把流程转化成代码

具体训练:

1. 替换所有的问号

题目:

在这里插入图片描述

分析题目并提出,解决方法:

在这里插入图片描述

题解核心逻辑:

在这里插入图片描述
在这里插入图片描述

class Solution {
public:string modifyString(string s) {//较为简单直接根据题意模拟即可//当找到一个 ? 时,通过遍历尝试的方法,找到不和前后相等的字符即可int n = s.size();for(int i = 0;i < n;i++){if(s[i] == '?'){for(char c = 'a';c < 'z';c++){// if(i == 0 && s[i+1] != c){//     s[i] = c;//     break;// }else if(i == n - 1 && s[i-1] != c){//     s[i] = c ;//     break;// }else if(s[i+1] != c && s[i-1] != c){//     s[i] = c;//     break;// }//判断和前面与后面的字符是否相等if((i == 0 || c != s[i-1]) && (i == n-1 || c != s[i+1])){s[i] = c;break;}}}}return s;}
};

2. 提莫攻击

题目:

在这里插入图片描述

分析题目并提出,解决方法:

理解实例1:
在这里插入图片描述
理解重置:
在这里插入图片描述

题解核心逻辑:

在这里插入图片描述

class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int res = 0;for(int i = 0;i < timeSeries.size() - 1;i++){//不考虑最后一个因为直接加上就好int x = timeSeries[i+1] - timeSeries[i];if(x >= duration) res += duration;else res += x;//加上 和 后面开始时间的差值(因为会重置)}res += duration;return res;}
};

3. Z 字形变换

题目:

在这里插入图片描述

分析题目并提出,解决方法:

解法1:直接模拟,通过一个vector创建矩阵存储,数据z型的过程,最终遍历矩阵即可

解法2:
找规律,通过得出的矩阵,将他们的下标标出来,不难看出下图规律:
在这里插入图片描述

题解核心逻辑:

class Solution {
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;}
};

在这里插入图片描述

4. 外观数列

题目:

在这里插入图片描述

分析题目并提出,解决方法:

在这里插入图片描述

题解核心逻辑:

  1. 简单的模拟:通过双指针的方式查询连续的区间以及个数
  2. 在遍历 n 次即可得到 n 的外观数
class Solution {
public:string countAndSay(int n) {string res = "1";// for(int i= 0 ; i < n - 1;i++){//进行n次//     int left = 0 ,right = 0;//使用一个双指针判断连续个数//     string tmp;//存储一次的情况//     while(right < res.size()){//         right++;                //         if(right < res.size()){//在范围内//             if(res[right] != res[right-1])//             {//                 //记录//                 tmp += to_string(right - left) + res[right-1];//                 left = right;//             }//         }//         else//         {//             tmp += to_string(right - left) + res[right-1];//             break;//         }//     }//     res = tmp;// }//更简洁的写法:for(int i = 0; i < n - 1;i++){string tmp;int len = res.size();for(int left = 0,right = 0; right < len;){//寻找第一个不同的位置(注意包括最后)while(right < len && res[right] == res[left]) right++;//到达此处代表出现不同,或者直接到了最后:tmp += to_string(right - left) + res[left];left = right;//从新位置开始继续找}res = tmp;}return res;}
};

5. 数青蛙

题目:

分析题目并提出,解决方法:

在这里插入图片描述
在这里插入图片描述

题解核心逻辑:

class Solution {
public:int minNumberOfFrogs(string croakOfFrogs) {//通过hash的方式记录青蛙叫的过程//当是 r o a k 字符时:需要再hash中判断 其前导字符( r 前导字符是 c、o -> r、...)是否存在//若存在 则代表正常:在hash中 当前字符++,前导字符--//若不存在,则代表不正常,也代表字符串不连续 是有问题的 返回-1//当是 c 字符时:分成两种情况,//一种是前面有青蛙叫完了(k值 不等与0)://1. 那么 k--、c++,让之前的青蛙继续往后叫(重复前面的操作)//第二种则是前面没青蛙,则 k == 0//那么就直接 c++,继续往后即可int hash[6] = {0};//记录叫的过程//直接用 6 大小的数组代表 0 c r o c k(留一个位置方便字符对应下标理解)for(int i = 0; i < croakOfFrogs.size();i++){if(croakOfFrogs[i] == 'c'){if(hash[5] != 0){hash[5]--;}hash[1]++;}else{//此处代表不是第一个字符int index;if(croakOfFrogs[i] == 'r') index = 2;else if(croakOfFrogs[i] == 'o') index = 3;else if(croakOfFrogs[i] == 'a') index = 4;else if(croakOfFrogs[i] == 'k') index = 5;if(hash[index - 1] != 0){//判断前导是否存在hash[index - 1]--;hash[index]++;}else{return -1;//若前导不存在则是有问题的!}}}for(int i = 1;i < 5;i++){if(hash[i] != 0){return -1;//不等于0就代表没叫玩就结束了那么就填0即可}} return hash[5];}
};

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

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

相关文章

​​解锁 JavaScript DOM:节点操作的核心方法与最佳实践

引言 在当今动态化的 Web 世界中&#xff0c;用户早已不满足于静态的网页展示&#xff0c;而是期待流畅的交互体验——点击按钮弹出菜单、滚动页面加载数据、实时搜索过滤内容……这些功能的背后&#xff0c;都离不开 ​JavaScript DOM&#xff08;文档对象模型&#xff09;操…

Android 12系统源码_系统启动(二)Zygote进程

前言 Zygote&#xff08;意为“受精卵”&#xff09;是 Android 系统中的一个核心进程&#xff0c;负责 孵化&#xff08;fork&#xff09;应用进程&#xff0c;以优化应用启动速度和内存占用。它是 Android 系统启动后第一个由 init 进程启动的 Java 进程&#xff0c;后续所有…

精华贴分享|从不同的交易理论来理解头肩形态,殊途同归

本文来源于量化小论坛策略分享会板块精华帖&#xff0c;作者为孙小迪&#xff0c;发布于2025年2月17日。 以下为精华帖正文&#xff1a; 01 前言 学习了一段时间交易后&#xff0c;我发现在几百年的历史中&#xff0c;不同门派的交易理论对同一种市场特征的称呼不一样&#x…

C++智能指针万字详细讲解(包含智能指针的模拟实现)

在笔试&#xff0c;面试中智能指针经常出现&#xff0c;如果你对智能指针的作用&#xff0c;原理&#xff0c;用法不了解&#xff0c;那么可以看看这篇博客讲解&#xff0c;此外本博客还简单模拟实现了各种指针&#xff0c;在本篇的最后还应对面试题对智能指针的知识点进行了拓…

学习threejs,使用多面体(IcosahedronGeometry、TetrahedronGeometry、OctahedronGeometry等)

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PolyhedronGeometry …

DeepSeek详解:探索下一代语言模型

文章目录 前言一、什么是DeepSeek二、DeepSeek核心技术2.1 Transformer架构2.1.1 自注意力机制 (Self-Attention Mechanism)(a) 核心思想(b) 计算过程(c) 代码实现 2.1.2 多头注意力 (Multi-Head Attention)(a) 核心思想(b) 工作原理(c) 数学描述(d) 代码实现 2.1.3 位置编码 (…

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…

网络运维学习笔记(DeepSeek优化版) 022 HCIP-Datacom路由概念、BFD协议详解与OSPF第一课

文章目录 路由概念、BFD协议详解与OSPF第一课一、路由协议优先级与选路原则1.1 路由协议优先级对照表1.2 路由选路核心原则 二、BFD&#xff08;Bidirectional Forwarding Detection&#xff0c;双向转发检测&#xff09;的配置与应用2.1 双向心跳探测&#xff08;双端配置&…

单应性矩阵(homography)

利用单应性矩阵计算内外参矩阵 利用单应性矩阵解决问题 问题描述&#xff1a;

Scavenge算法的优缺点问题

Scavenge 的缺点是只能使用堆内存中的一半&#xff0c;这是由划分空间和复制机制所决定的。但 Scavenge 由于只复制存活的对象&#xff0c;并且对于生命周期短的场景&#xff0c;存活对象只占少部分&#xff0c;所以它在时间效率上有优异的表现。 由于 Scavenge 是典型的牺牲空…

丝杆支撑座间隙调整不当会带来哪些影响?

丝杆支撑座是一种用于支撑滚珠丝杆的零件&#xff0c;通常用于机床、数控机床、自动化生产线等高精度机械设备中。支撑座间隙调整不当会对机械设备的运行产生多方面的影响&#xff0c;接下来一起了解一下&#xff1a; 1、降低加工精度&#xff1a;在机械加工设备中&#xff0c;…

Unity:EasyRoad3D插件学习 二期

前言&#xff1a; 书接上回。 一、场景视图状态&#xff1a; 创建好道路以后&#xff0c;切换到第一个选项&#xff0c;场景视图状态&#xff0c;查看道路信息&#xff0c;Main Settings修改道路名称、类型&#xff0c;宽度&#xff0c;是否闭环。 RoadWidth改为15&#xff…

内网渗透-DLL和C语言加载木马

免杀进阶技术 1、DLL的定义与使用 DLL:Dynamic Link library,动态链接库&#xff0c;是一个无法自己运行&#xff0c;需要额外的命令或程序来对其接口进行调用&#xff08;类方法、函数&#xff09;。 (1)在DevCpp中创建一个DLL项目 (2)在dllmain.c中定义源代码函数接口 #i…

一洽让常见问题的快速咨询,触手可及

在客户服务场景中&#xff0c;重复性常见问题的处理效率直接影响用户体验与客服成本。针对重复性常见问题&#xff0c;如何以直观的方式呈现给用户&#xff0c;使其能够快速、精准地提出咨询&#xff0c;已成为提升客户满意度的关键因素。 一、传统客服模式的效率枷锁 用户咨…

WEB攻防-Java安全SPEL表达式SSTI模版注入XXEJDBCMyBatis注入

目录 靶场搭建 JavaSec ​编辑​编辑 Hello-Java-Sec(可看到代码对比) SQL注入-JDBC(Java语言连接数据库) 1、采用Statement方法拼接SQL语句 2.PrepareStatement会对SQL语句进行预编译&#xff0c;但如果直接采取拼接的方式构造SQL&#xff0c;此时进行预编译也无用。 3、…

树莓集团南京园区启航:数字经济新地标!

深耕数字产业&#xff0c;构筑生态闭环 树莓集团在数字产业领域拥有超过十年的深厚积累&#xff0c;专注于构建“数字产业”的融合生态链。其核心优势在于有效整合政府、产业、企业及高校资源&#xff0c;形成一个协同创新、价值共生的产业生态闭环系统。 赋能转型&#xff0c…

Redis之bimap/hyperloglog/GEO

bimap/hyperloglog/GEO的真实需求 这些需求的痛点&#xff1a;亿级数据的收集清洗统计展现。一句话&#xff1a;存的进取得快多维度 真正有价值的是统计。 统计的类型 亿级系统中常见的四种统计 聚合统计 统计多个集合元素的聚合结果&#xff0c;就是交差并等集合统计。 排…

nara wpe去混响学习笔记

文章目录 1.WPE方法去混响的基本流程1.1.基本流程 2.离线迭代方法3.在线求法3.1.回顾卡尔曼方法3.2.在线去混响递推滤波器G方法 nara wpe git地址 博客中demo代码下载 参考论文 NARA - WPE: A Python Package for Weighted Prediction Error Dereverberation in Numpy and Ten…

JavaScript函数、箭头函数、匿名函数

1.示例代码(包括用法和注意事项) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-函数</title…

练习:求平方根

需求&#xff1a;键盘录入一个大于等于2的整数x&#xff0c;计算并返回x的平方根。结果只保留整数部分&#xff0c;小数部分将被舍去。 代码一&#xff1a; //求平方根 //方法一&#xff1a; package Online; import java.util.Scanner; public class SquareRoot {public sta…