【优选算法】模拟 {经验总结;相关编程题解析}

一、经验总结

模拟题型的算法原理相对简单,就是依葫芦画瓢:题目中怎样描述,算法就怎样执行。考验的主要是将实际问题转换为代码的能力。

但是模拟题型并不是只能傻乎乎的按步骤编码,也可以先将模拟算法的流程通过举例或绘图演示一遍,再从中总结规律或是利用数学办法进行计算,算法的效率也能得到很大的提升。


二、相关编程题

2.1 替换所有的问号

题目链接

1576. 替换所有的问号 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

在这里插入图片描述

编写代码

class Solution {
public:
    string modifyString(string s) {
        for(size_t i = 0; i < s.size(); ++i)
        {
            if(s[i] == '?')
            {
                for(char ch = 'a'; ch <= 'z'; ++ch)
                {
                    if(i>0 && ch == s[i-1] || i<s.size()-1 && ch == s[i+1])
                    {
                        continue;
                    }
                    else
                    {
                        s[i] = ch;
                        break;
                    }   
                }
            }
        }
        return s;
    }
};

2.2 提莫攻击

题目链接

495. 提莫攻击 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

在这里插入图片描述

编写代码

class Solution {
public:
    int findPoisonedDuration(vector<int>& timeSeries, int duration) {
        int ret = 0;
        for(size_t i = 0; i < timeSeries.size()-1; ++i)
        {
            int diff = timeSeries[i+1]-timeSeries[i];
            if(diff >= duration)
                ret += duration;
            else
                ret += diff;
        }
        ret+=duration;
        return ret;
    }
};

2.3 N字形变换

题目链接

6. Z 字形变换 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

在这里插入图片描述

编写代码

class Solution {
public:
    string convert(string s, int numRows) {
        // 处理边界情况
        if (numRows == 1)
            return s;
        int d = 2 * numRows - 2;
        int n = s.size();
        string ret;
        // 处理第一行
        for (int i = 0; i < n; i += d)
            ret += s[i];
        // 处理中间行
        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];
            }
        }
        // 处理最后一行
        for (int i = numRows - 1; i < n; i += d)
            ret += s[i];
        return ret;
    }
};

2.4 外观数列

题目链接

38. 外观数列 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

在这里插入图片描述

编写代码

//递归
class Solution {
public:
    string countAndSay(int n) {
        if(n == 1) return "1";
        string prev = countAndSay(n - 1);
        string ret;
        int left = 0, right = 0;
        while (right < prev.size()) {
            if (prev[left] != prev[right]) {
                ret += (right - left) + '0';
                ret += prev[left];
                left = right;
            } else {
                ++right;
            }
        }
        ret += (right - left) + '0';
        ret += prev[left];
        return ret;
    }
};

//非递归
class Solution {
public:
    string countAndSay(int n) {
        string ret = "1";
        for(int i = 0; i < n-1; ++i)
        {
            string tmp;
            int left = 0, right = 0;
            while(right < ret.size())
            {
                while(right < ret.size() && ret[right] == ret[left])
                    ++right;
                tmp += to_string(right-left) + ret[left];
                left = right;
            }
            ret = tmp;
        }
        return ret;
    }
};

2.5 数青蛙

题目链接

1419. 数青蛙 - 力扣(LeetCode)

题目描述

在这里插入图片描述

算法原理

在这里插入图片描述

编写代码

class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        //将所有得字符映射到数组,方便找到croak中的前一个字符
        string str = "croak";
        unordered_map <char, int> index;
        int n = str.size();
        for(int i = 0; i < n; ++i)
        {
            index[str[i]] = i;
        }
        //该哈希表用于追踪每只青蛙的croak
        vector<int> hash(n, 0); 
        for(int i = 0; i < croakOfFrogs.size(); ++i)
        {
            char curi = index[croakOfFrogs[i]];
            if(curi == 0)
            {
                if(hash[n-1] != 0) --hash[n-1];
                ++hash[curi];
            }
            else
            {
                if(hash[curi-1] == 0) return -1; //存在无效的croak
                --hash[curi-1];
                ++hash[curi];
            }
        }
        //检查无尾的croak
        for(int i = 0; i < n-1; ++i)
        {
            if(hash[i] != 0) return -1; //存在无效的croak
        }
        return hash[n-1];
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gpt-4o考场安排

说明 &#xff1a;经过多次交互&#xff0c;前后花了几个小时&#xff0c;总算完成了基本功能。如果做到按不同层次分配考场&#xff0c;一键出打印结果就完美了。如果不想看中间“艰苦”的过程&#xff0c;请直接跳到“最后结果”及“食用方法”。中间过程还省略了一部分交互&…

支付风险智能风控应用与评估指引

伴随宏观经济环境变化、支付监管愈趋从严、金融科技不断创新、支付参与主体日趋多元&#xff0c;支付行业正面临着业务发展与合规经营、支付便捷与安全、数据挖掘与隐私保护等诸多挑战&#xff0c;支付风险的复杂性与日俱增&#xff0c;共同建设安全支付生态的必要性不断凸显&a…

探索 Rust 语言的精髓:深入 Rust 标准库

探索 Rust 语言的精髓&#xff1a;深入 Rust 标准库 Rust&#xff0c;这门现代编程语言以其内存安全、并发性和性能优势而闻名。它不仅在系统编程领域展现出强大的能力&#xff0c;也越来越多地被应用于WebAssembly、嵌入式系统、分布式服务等众多领域。Rust 的成功&#xff0…

【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法

文章目录 前言 Timer中断调度 Event中断调度 StateFlow调度 分析和应用 总结 参考资料 前言 近期在一些嵌入式系统开发项目中&#xff0c;在使用嵌入式处理器时&#xff0c;遇到了挺多费时费力的事情。所以利用晚上和周末时间&#xff0c;在这些方面深入研究了一下&…

等保测评-安全通信网络与安全区域边界

等保测评&#xff0c;全称为网络安全等级保护测评&#xff0c;是中国网络安全领域的一项重要工作&#xff0c;旨在通过标准化的测评流程&#xff0c;确保信息系统的安全等级保护措施符合国家相关标准。在等保测评中&#xff0c;"安全通信网络"与"安全区域边界&q…

【机器学习与大模型】开源大模型和闭源大模型:技术发展与社会责任的平衡点

目录 &#x1f4a1;引言✈️✈️一&#xff0c;开源大模型的优势与劣势✈️✈️1.1 优势&#xff1a;✈️✈️1.2 挑战和劣势&#xff1a; &#x1f680;&#x1f680;2. 闭源大模型的优势与劣势&#x1f680;&#x1f680;2.1 优势&#xff1a;&#x1f680;&#x1f680;2.2 …

App推广排名:ASO三大优化策略

ASO优化帮助产品在应用市场上获得更高的排名。而且对于APP产品来说&#xff0c;ASO在合理控制成本的要求下&#xff0c;能带来多方面看得见的提升。小柚在过去的十年里&#xff0c;和教育、金融、医疗、工业等多个领域的老板达成合作&#xff0c;并取得了优秀的成绩。 一、提升…

优雅草便民工具v2.0.4更新

优雅草便民工具v2.0.4更新 优雅草便民工具v2.0.4更新 2024年5月20日v2.0.4更新优雅草便民工具youyacao-tools-增加淘宝联想词功能和ai绘画功能apk下载 https://fenfacun.youyacao.com/tools204.apk 介绍 优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益…

web4.0-元宇宙虚拟现实

互联网一直在不断演变和改变我们的生活方式&#xff0c;从Web逐渐 1.0时代的静态网页到Web 2.0时代的社会性和内容制作&#xff0c;再从Web逐渐 在3.0阶段&#xff0c;互联网发展一直推动着大家时代的发展。如今&#xff0c;大家正站在互联网演化的新起点上&#xff0c;迈入Web…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-38-如何截图-下篇

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 这个系列的文章也讲解和分享了差不多三分之一吧&#xff0c;突然有小伙伴或者童鞋们问道playwright有没有截图的方法。答案当然是&#xff1a;肯定有的。宏哥回过头来看看确实…

SAPUI5基础知识2 - 手动创建一个SAPUI5的项目

1. 前言 在本篇文章中&#xff0c;我们将手动一步一步建立出第一个SAPUI5的 ‘Hello World!’ 项目。 2. 步骤详解 2.1 在BAS中建立Dev Space 进入SAP Business Application Studio的Dev Space Manger&#xff0c;选择创建Dev Space。 勾选HTML5 Application Template插件…

【算法】二分算法——山脉数组的峰顶索引

该题用二分算法解“山脉数组的峰顶索引”&#xff0c;有需要借鉴即可。 目录 1.题目2.总结 1.题目 题目链接&#xff1a;LINK 暴力求解很简单&#xff0c;这里不再提及。 这个可以根据峰顶值分为两部分&#xff0c;因而具有“二段性”&#xff0c;可以用二分算法&#xff0c…

一个超级简单的Python UI库:NiceGUI

大家好&#xff0c;图形用户界面&#xff08;GUI&#xff09;的开发往往被看作是一项复杂且繁琐的任务。Python作为一门强大的编程语言&#xff0c;提供了许多优秀的库来帮助开发者实现这一目标。今天&#xff0c;我们将介绍一个名为NiceGUI的库&#xff0c;它能帮助你轻松构建…

ue5 后期处理体积lut如何加入

零、需要颜色查找表格&#xff0c;ps 一、ps中 把调节好的shift 一起拖入颜色查找表格 二、存储为png格式 另存为 保护好原来的颜色查找表格 三、导入ue5中 四、在后期处理体积中搜索misc 替换颜色查找表格 五、双击后期处理体积 纹理组替换颜色查找表格 2. 压缩设置lut改成…

MES系统对车间生产的实时监控和数据分析功能

一、企业为什么要使用MES系统&#xff1f; 生产制造企业因原材料价格波动大、生产成本高、利润薄等一系列特性&#xff0c;在企业经营上面临着诸多挑战。当企业在生产管理中遇到以下问题时&#xff0c;会考虑使用MES系统&#xff1a; 生产效率问题&#xff1a;当企业需要提高生…

leetcode-主持人调度(二)-110

题目要求 思路 1.先将开始时间和结束时间拆分放到两个数组中进行排序 2.如果开始的时间小于结束时间&#xff0c;说明目前没有空闲的人&#xff0c;需要增加人&#xff0c;如果大于等于&#xff0c;说明有人刚结束了主持&#xff0c;可以进行新的主持了&#xff0c;变更到下一…

[图解]产品经理创新模式03封装领域逻辑

1 00:00:02,530 --> 00:00:06,840 第三个改进模式就是封装领域逻辑 2 00:00:06,840 --> 00:00:12,860 把人脑里面的封装的逻辑提炼出来 3 00:00:12,870 --> 00:00:13,740 放到电脑里面去 4 00:00:16,100 --> 00:00:21,440 比如说&#xff0c;销售员的&#xff0…

【C++入门】—— C++入门 (下)_内联函数

前言&#xff1a;在了解完前面的C基础内容后&#xff0c;马上我们就要真正不如C的学习了&#xff0c;但在之前让我们最后了解最后一点点C入门知识&#xff01;来迟的520特别篇&#xff01; 本篇主要内容&#xff1a; 内联函数 auto关键字 范围for 指针空值nullptr C入门 1. 内联…

C语言刷题学习知识点1_20240219-

目录 1 sizeof2 scanf3 getchar()4 循环练习 1 sizeof sizeof 是C语言中的一个操作符&#xff0c;就和 - * 、/ 一样&#xff0c;它是用来计算变量或者类型所占空间大小的~计算结果的单位是字节&#xff0c;1字节是8个bit位。 2 scanf scanf 是为了获取你键盘输入的字符&…