模拟算法 (算法详解+例题)

一、什么是模拟

模拟是对真实事物或者过程的虚拟。在编程时为了实现某个功能,可以用语言来模拟那个功能,模拟成功也就相应地表示编程成功。

二、模拟算法的特点和技巧

特点:

  • 代码量大

  • 操作多

  • 思路复杂

  • 较为复杂的模拟题出错后难定位错误

技巧:

  • 在动手写代码之前,在草纸上尽可能地写好要实现的流程.

  • 在代码中,尽量把每个部分模块化,写成函数、结构体或类

  • 对于一些可能重复用到的概念,可以统一转化,方便处理:如,某题给你"YY-MM-DD 时:分" 把它抽取到一个函数,处理成秒,会减少概念混淆

  • 调试时分块调试。模块化的好处就是可以方便的单独调某一部分

  • 写代码的时候一定要思路清晰,不要想到什么写什么,要按照落在纸上的步骤写

三、模拟OJ题

3.1、替换所有的问号

1576. 替换所有的问号

在这里插入图片描述

算法思路

纯模拟。从前往后遍历整个字符串,找到问号之后,就⽤ a ~ z 的每⼀个字符去尝试替换即可。

算法代码

class Solution {
   
public:
    string modifyString(string s) {
   
        for(int i = 0; i<s.size(); i++)//遍历每一个字符
        {
   
            if(s[i] == '?')
            {
   
                for(char ch = 'a'; ch <= 'z'; ch++)//a ~ z都试试
                {
   
                    if(i == 0 && ch != s[i+1]) //头位置是'?',不能和后一个相等
                        s[i] = ch;
                    else if(i == s.size()-1 && ch != s[i-1])//尾位置是'?' ,不能和前一个相等
                        s[i] = ch;
                    else if(ch != s[i+1] && ch != s[i-1]) //中间情况, 不能和两边相等
                        s[i] = ch;
                }
            }
        }
        return s;
    }
};

3.2、提莫攻击

495. 提莫攻击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值