当前位置: 首页 > news >正文

算法————模拟算法

目录

一、模拟算法

二、题目

1、替换所有的问号​​​​​​

(1)题目 

​编辑

(2)解题思路

(3)代码实现

​编辑

 2、提莫攻击

 (1)题目

(2)解题思路

(3)代码解答

3、Z字形变换

(1)题目

(2)解题思路

(3)代码实现

4、外观数组

(1)题目

​编辑

(2)解题思路

(3)代码书写 

5、数青蛙 

(1)题目

(2)解题思路

(3)代码书写


一、模拟算法

顾名思义该类型的题目的思路十分简单,只需要根据题目来写代码

二、题目

1、替换所有的问号​​​​​​

(1)题目 

(2)解题思路

只需遍历字符串找出?,将?的位置替换成左右两边不同的字母

(3)代码实现

class Solution 
{
public:string modifyString(string s){int n = s.size();for(int i = 0; i<s.size();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; }}}}return s;}};

 2、提莫攻击

 (1)题目

(2)解题思路

我们观察发现当两次攻击的时间间隔大于duration,中毒时间就是duration.如果小于duration,中毒持续的时间就是两次攻击的秒数相减,只要把中毒时间都加到一起就是最后的结果

注意:不要忘记最后的三秒

(3)代码解答

class Solution
{
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int sum = 0;int n = timeSeries.size();for(int i = 0 ; i < n - 1; i++){if(timeSeries[i+1]-timeSeries[i]<duration){sum += timeSeries[i+1]-timeSeries[i];}else{sum += duration;}}return sum + duration;}
};
3、Z字形变换
(1)题目

(2)解题思路

方法一:直接模拟

 首先将他们按照Z字行来排列,在输出

方法二:根据规律,直接输出

我们首先将行数设置为n ,观察上图我们可以发现第一行和最后一行每一个相隔2*n-2(设为公差d)

中间的第k行遵循k , d-k, d+k ,d+d-k ,d+d+d+k ,d+d+d-k的规律

(3)代码实现

class Solution 
{
public:string convert(string s, int numRows) {string r;if(numRows == 1){return s;}int d = 2 * numRows-2;for(int i = 0; i < s.size(); i += d){r+=s[i];}for(int k = 1; k < numRows - 1; k++){for(int i = k, j = d-k; i < s.size() || j < s.size(); i+=d,j+=d){if(i < s.size()){r+=s[i];}if(j < s.size()){r+=s[j];}}}for(int k = numRows - 1; k<s.size(); k+=d){r+=s[k];}return r;}
};

4、外观数组

(1)题目
(2)解题思路

模拟+双指针:我们可以发现这个本质就是找字符串中有几个不同

 

(3)代码书写 

 

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

5、数青蛙 

(1)题目

(2)解题思路

我们可以借助哈希来模拟记录每一个字母对应出现的次数

(3)代码书写

 

 

class Solution 
{
public:int minNumberOfFrogs(string croakOfFrogs) {string t ="croak";int n = t.size();vector<int> hash(n,0);unordered_map<char ,int> index;for(int i = 0; i<n;i++){index[t[i]] = i; }for(auto ch : croakOfFrogs){if(ch=='c'){if(hash[n-1]==0) hash[0]++;else{hash[n-1]--;hash[0]++;}}else{int i = index[ch];if(hash[i-1] == 0) return -1;else{hash[i-1]--;hash[i]++;}}}for(int i = 0 ; i<n-1; i++){if(hash[i]!=0)return -1;}return hash[n-1];}
};

http://www.dtcms.com/a/268669.html

相关文章:

  • Oracle实用参考(13)——Oracle for Linux PSR及PSU升级
  • C++系列(七):深度探索C++内存 --- 分区、堆栈、new/delete与高效编程实践
  • 动态规划递归与迭代实现对比
  • Data Agent:从技术本质到企业级实践的全景解析
  • LeetCode Hot 100 除自身以外数组的乘积
  • 16th Day| 222.完全二叉树的节点个数,110.平衡二叉树,257.二叉树的所有路径,404.左叶子之和
  • 分布式推客系统架构设计:从微服务到高性能计算的实践路径
  • WebView 中 Cookie 丢失怎么办?跨域状态不同步的调试与修复经验
  • 6,Receiving Messages:@KafkaListener Annotation
  • 诊断工程师进阶篇 --- 车载诊断怎么与时俱进?
  • vue3 字符包含
  • vue openlayer 找出直线上的某一个点 , 点距离直线 最短路径的点 WKT坐标转换为GeoJSON坐标
  • iOS Widget 开发-1:什么是 iOS Widget?开发前的基本认知
  • 亚马逊运营进阶指南:如何用AI工具赋能广告运营
  • 期待在 VR 森林体验模拟中实现与森林的 “虚拟复现”​
  • 华锐视点 VR 污水处理技术对激发学习兴趣的作用​
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十四天
  • UI + MCP Client + MCP Server实验案例
  • 【机器学习笔记 Ⅱ】11 决策树模型
  • Spring Boot 操作 Redis 时 KeySerializer 和 HashKeySerializer 有什么区别?
  • day16——Java集合进阶(Collection、List、Set)
  • Kafka消息积压的原因分析与解决方案
  • 网络安全之重放攻击:原理、危害与防御之道
  • windows grpcurl
  • 用安卓手机给苹果手机设置使用时长限制,怎样将苹果手机的某些APP设置为禁用?有三种方法
  • 软件工程功能点估算基础
  • QML Row与Column布局
  • YOLOv11 架构优化:提升目标检测性能
  • 国内免代理免费使用Gemini大模型实战
  • Vue的生命周期(Vue2)