首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >模拟篇——算法浮世绘,探寻模拟之境的计算艺术(2)

模拟篇——算法浮世绘,探寻模拟之境的计算艺术(2)

作者头像
用户11379153
发布2025-11-05 15:48:59
发布2025-11-05 15:48:59
870
举报
在这里插入图片描述
在这里插入图片描述

前言

上篇我们介绍了模拟算法的原理概念及部分基础题型,本篇将结合进阶题目,深化对于模拟算法的理解运用。

一. 外观数列

1.1 题目链接:https://leetcode.cn/problems/count-and-say/description/

1.2 题目分析:

题目要求按规则返回字符串,元素n代表需要阐述n次,其中每一次都是对上一次元素内容的说明。 例如1->1 2->11 3->21

1.3 思路讲解:

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

1.4 代码实现:

代码语言:javascript
复制
class Solution {
public:
    string countAndSay(int n) {
        string ret="1";
        //需要解释n-1次
        for(int i=1;i<n;i++)
        {
            string temp;
            int len=ret.size();
            for(int left=0,right=0;right<len;)
            {
                while(right<len&&ret[left]==ret[right])
                {
                    right++;
                }//相同元素的个数
                temp+=(to_string(right-left))+ret[left];
                left=right;//更新left
            }
            ret=temp;//更新每一次解释结果
        }
        return ret;
        
    }
};

二. 数青蛙

2.1 题目链接:https://leetcode.cn/problems/minimum-number-of-frogs-croaking/description/

2.2 题目分析:

  • croak单词代表蛙鸣,青蛙必须按顺序c,r,o,a,k依次鸣叫,如果字符串不符合鸣叫顺序,则直接返回-1
  • 同一时间可以有多只青蛙鸣叫
  • 单只青蛙完成本次鸣叫后可以继续鸣叫
  • 求取完成鸣叫所需的最少青蛙数目

2.3 思路讲解:

模拟青蛙的叫声:

  • 当遇到 ‘r’ ‘o’ ‘a’ ‘k’ 这四个字符的时候,我们要去看看每⼀个字符对应的前驱字符,有没有⻘蛙叫出来。如果有⻘蛙叫出来,那就让这个⻘蛙接下来喊出来这个字符;如果没有,直接返回 -1 ;
  • 当遇到 ‘c’ 这个字符的时候,我们去看看 ‘k’ 这个字符有没有⻘蛙叫出来。如果有,就让这个⻘蛙继续去喊 ‘c’ 这个字符;如果没有的话,就需要再来⼀个⻘蛙。

具体步骤如下:

  1. 创建一个哈希表用来记录字符及其前驱字符的鸣叫情况
  2. 利用croak的下标与哈希表映射对应,分情况一一判断

1.4 代码实现:

代码语言:javascript
复制
class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        string t="croak";
        int n=t.size();
        vector<int> hash(n);//记录
        unordered_map<char,int> index;//记录字符下标
       for(int i=0;i<n;i++)
       {
         index[t[i]]=i;
       }//index与下标一一对应
       for(auto e:croakOfFrogs)
       {
        if(e=='c')
        {
            if(hash[4]>0)
            {
                hash[0]++;
                hash[4]--;
            }//直接令该青蛙继续鸣叫
            else
            {
                hash[0]++;
            }
        }
        else
        {
            int i=index[e];//该元素下标
            if(hash[i-1]<1)//前方无可继续鸣叫的青蛙
            {
                return -1;
            }
            else
            {
                hash[i-1]--;
                hash[i]++;
            }//更新哈希表
        }
       }
        for(int i=0;i<n-1;i++)
        {
            if(hash[i]!=0)
            {
                return -1;
            }
        }//全部鸣叫后应该只有hash[4]不为0,代表青蛙个数
        return hash[4];
        
    }
};

三. 实际应用场景

  • 工程与科学研究 模拟算法广泛应用于航空航天、材料科学等领域,如模拟飞行器空气动力学特性或预测新材料的性能。
  • 游戏开发与虚拟现实 在游戏与VR中,模拟算法赋予虚拟角色真实行为,营造身临其境的体验,例如模拟天气变化或物理碰撞效果。
  • 经济与社会系统建模 通过模拟市场行为或社会网络传播模式,分析经济政策或舆论传播的潜在影响。
  • 人工智能与机器学习 模拟环境为强化学习算法提供训练场景,例如无人车的虚拟驾驶测试。

小结

模拟算法在现代科技中扮演着“虚拟工匠”的角色,承载了现实与数字世界的桥梁之梦。它不仅是一种计算工具,更是一门艺术,一种用逻辑与数据描绘现实的艺术。

“镜中缘,风中影,算法描绘万象生。” 让我们踏上这段探索之旅,在数字模拟的镜像中窥见未来的可能性。

本篇关于模拟算法的讲解就暂告段落啦,希望能对大家的学习产生帮助,欢迎各位佬前来支持斧正!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一. 外观数列
    • 1.1 题目链接:https://leetcode.cn/problems/count-and-say/description/
    • 1.2 题目分析:
    • 1.3 思路讲解:
    • 1.4 代码实现:
  • 二. 数青蛙
    • 2.1 题目链接:https://leetcode.cn/problems/minimum-number-of-frogs-croaking/description/
    • 2.2 题目分析:
    • 2.3 思路讲解:
    • 1.4 代码实现:
  • 三. 实际应用场景
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档