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

算法--模拟题目

算法–模拟问题

  1. 1576. 替换所有的问号
思路:遍历字符串,找到?, 然后遍历字符'a' 到 'z' 找到不等于前后字符,替换即可
class Solution {
public:string modifyString(string s) {for(int i = 0; i < s.size(); i++){if(s[i] == '?'){//替换for(char a = 'a'; a <= 'z'; a++){//当字符不等于第一个字符并且前一个字符等于当前字符是继续.//或当字符不等于最后一个字符且字符后一个字符等于当前字符时继续.if((i > 0 && s[i-1] == a) || i < s.size()-1 && s[i+1] == a){continue;}s[i] = a;break;}}}return s;}
};
  1. 495. 提莫攻击
思路: 有两种情况:1. 第二次攻击在第一次的中毒持续时间之内, 即 第二次攻击时间 - 第一次攻击时间 >= duration, 则 ans += duration 即可2. 第二次攻击时间在第一中毒持续时间之外, 即 第二次攻击时间 - 第一次攻击时间 < duration 则 ans += duration 即可最后 需要 + duration, 因为最后一次攻击没有考虑在内.
class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int ans = 0; if(timeSeries.size() == 1){return duration;}for(int right = 1; right < timeSeries.size(); right++){int left = right -1;int x = timeSeries[right] - timeSeries[left];if(x >= duration)ans += duration;else ans += x;}return ans + duration;}
};
    1. N 字形变换](https://gitee.com/link?target=https%3A%2F%2Fleetcode.cn%2Fproblems%2Fzigzag-conversion%2F)
思路:用数字模拟字符串找规律即可
0      6        12
1    5 7     11 13
2  4   8  10    14  16
3      9        15
第一行和最后一行的公差d = numRows;
中间行: 每次成对出现,(1,5) (7,11).... 规律: 第二个数 = d - 第一个数, 往后每对数分别增加 d
class Solution {
public:string convert(string s, int numRows) {string ans;int n = s.size();int d = numRows * 2 -2;if(numRows == 1){return s;}//处理第一行for(int i = 0; i < n; i += d){ans += s[i];}//处理中间行for(int row = 1; row < numRows - 1 ; row++){for(int i = row, j = d - i; i < n || j < n; i += d, j += d){if(i < n) ans += s[i];if(j < n) ans += s[j];}}//处理最后一行for(int i = numRows-1; i < n; i += d){ans += s[i];}return ans;}
};
  1. 38. 外观数列
思路: 使用双指针来确定ans中相同字符的个数和是什么字符.
class Solution {
public:string countAndSay(int n) {string ans{"1"};if(n == 1){return ans;}for(int i = 2; i <= n; i++){ans = describe(ans);}return ans;}string describe(string input){string output;int size = input.size();int left = 0; int right = 0;while(right <= size){if(right == size){output += std::to_string(right - left);output += input[left];return output;}if(input[right] == input[left]){right++;}else {output += std::to_string(right - left);output += input[left];left = right;}}return "0";}
};
  1. 1419. 数青蛙
思路:使用hash表解决
unordered_map<char,int> map; 存放字符和下标之间的映射关系
vector<int> hash; 模拟哈希表.存放字符出现的次数.
遍历字符串:有两种情况:当前字符是 'c', 需要看一下hash中'k'字符出现的次数是否为0,当为0时,表示此时没有一个青蛙完成叫完,'c'字符++即可,当不为0时,此时表示已经有青蛙叫完,需要'k'--,'c'++ 表示至少有多少只青蛙.当前字符不为'c',需要判断hash中前一个字符次数是否为0,当为零时,表示错误,直接返回-1,即叫出当前字符前必须已经叫出前一个字符,否则错误.当不为零时, 前一个字符次数--, 当前字符次数++;即可.
class Solution {
public:int minNumberOfFrogs(string croakOfFrogs) {unordered_map<char,int> map;//存放字符和下标的映射string s{"croak"};for(int i = 0; i < s.size(); i++){map[s[i]] = i;}vector<int> hash(5);for(char c : croakOfFrogs){if(c == 'c'){int index = map['k'];if(hash[index] != 0){hash[index]--;}hash[0]++;}else {int index = map[c];if(hash[index-1] != 0){hash[index -1]--;hash[index]++;}else{return -1;}}}for(int i = 0; i < hash.size()-1; i++){if(hash[i] != 0)return -1;}return hash[hash.size()-1];}
};

完!!!

相关文章:

  • C++中常用的十大排序方法之1——冒泡排序
  • 【数据结构】线性表--顺序表
  • 常用机械传动方式对比
  • 【笔记】深度学习模型训练的 GPU 内存优化之旅④:内存交换与重计算的联合优化篇
  • 腾讯云BI VS quickbi 企业选型(从企业实际功能使用和费用对比)
  • 提升采购管理,打造核心竞争力七步战略采购法详解P94(94页PPT)(文末有下载方式)
  • 【Bootstrap V4系列】学习入门教程之 页面内容排版
  • Qwen3 发布:优化编码与代理能力,强化 MCP 支持引领 AI 新潮流
  • PHP之CURL通过header传参数及接收
  • 如何快速定位网络中哪台主机发起ARP攻击
  • 前端八股 6
  • 【Linux】C语言补充知识
  • 西门子数字化研发设计制造一体化规划案例P87(87页PPT)(文末有下载方式)
  • PHP-Cookie
  • 攻防世界 - Misc - Level 6 | Wireshark
  • 字节一面:后端开发
  • 卡洛诗西餐的文化破圈之路
  • 3.2/Q2,Charls最新文章解读
  • SARSA 算法详解:python从零实现
  • TDA4VM SDK J721E (RTOS/Linux) bootloaders梳理笔记
  • 商务部新闻发言人就中美经贸对话磋商情况答记者问
  • 2025财政观察①长三角罚没收入增速放缓,24城仍在上涨
  • 全文丨中华人民共和国传染病防治法
  • 中国强镇密码丨洪泽湖畔的蒋坝,如何打破古镇刻板印象
  • 秦洪看盘|资金切换主线,重构市场风格
  • 济南高新区一季度GDP增长8.5%,第二产业增加值同比增长14.4%