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

模拟(5题)

目录

1.替换所有的问号

2.提莫攻击

3.z字形变换

4.外观数列

5.数青蛙


1.替换所有的问号

. - 力扣(LeetCode)

class Solution { public: string modifyString(string s) { for(int i = 0; i < s.size();i++) { if(s[i] == '?') { for(int j = 'a';j <= 'z';j++) { if(((i == 0) ||(s[i-1] != j)) && ((i == s.size()-1) || (s[i+1] != j))) { s[i] = j; break; } } } } return s; } };

2.提莫攻击

. - 力扣(LeetCode)

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

3.z字形变换

. - 力扣(LeetCode)

class Solution { public: string convert(string s, int numRows) { if(numRows == 1)return s; string ret; int n = s.size(); int gap = 2 * numRows - 2; for(int i = 0; i < numRows; i++) { if((i == 0) || (i == numRows - 1)) { for(int j = i; j < n; j += gap) { ret += s[j]; } } else { int x = i, y = gap - x; while(y < n) { ret += s[x]; ret += s[y]; x += gap; y += gap; } if(x < n)ret += s[x]; } } return ret; } };

我们可以依照题目所说先把字符填到二维数组中,但是我们可以直接寻找规律,然后做题。

由图我们可以得出,第一行和最后一行的规律相同,中间的几行的规律相同,

第一行和最后一行的起始位置分别是和numRows - 1;他们每个的间隔是2 * numRows - 2。

中间行数每行的初始有两个位置以黑三角与白圆圈表示,两个位置的下标之和为2 * numRows - 2;而两个位置到下一位置也均为加上2 * numRows - 2。

最后值得注意的是,若numRows为1,循环会陷入死循环,因此我们先要判读一下这种情况

4.外观数列

. - 力扣(LeetCode)

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

本质上是一道滑动窗口的题目,我们只需要循环这个过程即可

5.数青蛙

. - 力扣(LeetCode)

class Solution { public: int minNumberOfFrogs(string croakOfFrogs) { int hash[128]; int size = croakOfFrogs.size(); for(int i = 0; i < size; i++) { if(croakOfFrogs[i] == 'c') { if(hash['k']) { hash['k']--; hash['c']++; } else { hash['c']++; } } else if(croakOfFrogs[i] == 'r') { if(hash['c']) { hash['c']--; hash['r']++; } else return -1; } else if(croakOfFrogs[i] == 'o') { if(hash['r']) { hash['r']--; hash['o']++; } else return -1; } else if(croakOfFrogs[i] == 'a') { if(hash['o']) { hash['o']--; hash['a']++; } else return -1; } else { if(hash['a']) { hash['a']--; hash['k']++; } else return -1; } } if(hash['c'] || hash['r'] || hash['o'] || hash['a'])return -1; return hash['k']; } };

这题我们建立一个哈希表,用数组简单代替即可。

根据题意,我们从c开始记录青蛙的叫声。

当我们遇到r,o,a,k时,要去查询前一个字母是否有青蛙已经叫了,如果有,将前一个字母对应的值减一,将这个字母对应的值加一,如果没有,那么这个字符串即为非法。

题目要求最少,那么我们在记录c时,应该先查看k字母对应的值,如果大于零,说明已经有青蛙叫完一次了,那么我们将k对应的值减一,然后再将c对应的值加一。

最后当结束循环时,我们要保证croa这几处对应的值均为0,否则即为非法。

我们只需要返回k对应的值即可。

http://www.jsqmd.com/news/690777/

相关文章:

  • TorrServer性能优化:缓存策略、内存管理和网络调优
  • 量子约束阴影层析技术在分子模拟中的应用与突破
  • PPTAgent架构设计揭秘:智能Agent系统如何协作生成演示文稿
  • drawingboard.js与现代化前端框架集成:React、Vue和Angular的最佳实践
  • 【相当困难】Manacher算法-Java:进阶问题
  • 如何在KMM RSS Reader中实现Redux架构:状态管理最佳实践
  • React Router懒加载终极指南:如何大幅提升应用首屏性能
  • BrowserMob Proxy故障排除与调试:常见问题解决方案大全
  • 革命性表单工具vue-json-schema-form:5分钟快速构建动态表单
  • 避坑指南:Halcon点云在Qt中显示的5个常见问题(附调试技巧)
  • floodfill算法(6题)
  • React Router深度解析:构建企业级SPA的最佳实践
  • T-SAR技术:边缘计算中三元量化LLM的高效部署方案
  • 面试官灵魂拷问:为什么 SQL 语句不要过多的 join?
  • 利用大语言模型实现文本特征工程自动化
  • LLM嵌入技术在文本特征工程中的7个实战技巧
  • Qwen3-4B-Instruct效果展示:法律条文关联引用自动标注与案例匹配
  • 如何快速搭建你的智能对话搜索引擎:search_with_lepton完整指南
  • 掌握daisyUI渐变效果:打造惊艳色彩过渡动画的完整指南
  • 深入解析UEFI HII的IFR二进制:从VFR源码到内存操作码的编译与调试
  • Cortex训练成本控制:4x4090环境下的资源优化与效率提升
  • 终极指南:如何彻底解决Zigbee2MQTT的BUFFER_FULL错误
  • 记忆化搜索(5题)
  • 从QComboBox的坑说起:Qt控件编程中那些‘不请自来’的信号该如何优雅屏蔽?
  • Bulbea核心功能深度解析:从数据加载到可视化分析
  • 如何快速上手SqueezeNet:从零开始的完整部署教程
  • ROS2 Action通信深度解析:从Turtlesim案例到工业机器人应用实战
  • React Router v6新特性全解析:现代化路由解决方案终极指南
  • 2026滚筒烘干机技术解析:滚筒刮板烘干机/热风炉烘干机/盘式干燥机/真空干燥机/耙式干燥机/闪蒸干燥机/单锥干燥机/选择指南 - 优质品牌商家
  • Creality Ender-3 S1 Pro 3D打印机与激光雕刻二合一体验