✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
文章目录
目录
文章目录
前言
一. 模拟算法的总结
二. 模拟算法题目
2.1 替换所有的问号
2.2 提莫攻击
2.3 Z字形变换
2.4 外观数列
2.5 数青蛙
总结
前言
本篇详细介绍了模拟算法的使用,让使用者了解模拟算法,而不是仅仅停留在表面, 文章可能出现错误,如有请在评论区指正,让我们一起交流,共同进步!
一. 模拟算法的总结
模拟,属于入门级算法,顾名思义,就是让电脑按照题目所给出的方法来运行,最终输出所需要的结果的过程。本篇主要是从模拟算法的概念和实例进行讲解和分析。
二. 模拟算法题目
2.1 替换所有的问号
1576. 替换所有的问号 - 力扣(LeetCode)
class Solution {
public:string modifyString(string s) {int n = s.size();for(int i = 0;i<n;i++){if(s[i] == '?'){for(char ch = 'a';ch<='z';ch++){if((i == 0 || s[i-1] != ch) && (i == n-1 || s[i+1] != ch)){s[i] = ch;break;}}}}return s;}
};
2.2 提莫攻击
495. 提莫攻击 - 力扣(LeetCode)
class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int ret = duration;for(int i = 0;i<timeSeries.size()-1;i++){int x = timeSeries[i+1] - timeSeries[i];if(x<duration) ret+=x;else ret+=duration;}return ret;}
};
2.3 Z字形变换
6. Z 字形变换 - 力扣(LeetCode)
class Solution {
public:string convert(string s, int numRows) {//处理边界情况if(numRows == 1) return s;string ret;int d = 2*numRows-2;int 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;}
};
2.4 外观数列
38. 外观数列 - 力扣(LeetCode)
class Solution {
public:string countAndSay(int n) {string ret = "1";for(int i = 1;i<n;i++) //解释n-1次ret即可{string tmp;int n = ret.size();for(int left = 0,right = 0;right<n;){while(right<n&&ret[left] == ret[right]) 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) {string t = "croak";int n = t.size();vector<int> hash(n); //用数组来模拟哈希表unordered_map<char,int> index; //[x,x字符在hash中对应的下标] ——为了找前驱字符的下标for(int i = 0;i<n;i++)index[t[i]] = i;for(auto& ch : croakOfFrogs){if(ch == 'c'){if(hash[n-1]!=0) hash[n-1]--;hash[0]++;}else{int i = index[ch];if(hash[i-1] == 0) return -1;hash[i-1]--;hash[i]++;}}for(int i = 0;i<n-1;i++)if(hash[i]!=0)return -1;return hash[n-1];}
};
总结
✨✨✨各位读友,本篇分享到内容是否更好的让你理解模拟算法,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!