[Algorithm][模拟][替换所有问号][提莫攻击][N字形变换][外观数列][数青蛙] + 模拟原理详细讲解

目录

  • 0.原理讲解
  • 1.替换所有的问号
    • 1.题目链接
    • 2.代码实现
  • 2.提莫攻击
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.N 字形变换
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 4.外观数列
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 5.数青蛙
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


0.原理讲解

  • 模拟:依照题目要求,照葫芦画瓢:P
  • 如果模拟题的时间复杂度和空间复杂度过高,则一般都需要进行优化
  • 优化:一般都是找规律

1.替换所有的问号

1.题目链接

  • 替换所有的问号

2.代码实现

string ModifyString(string s) 
{for(int i = 0; i < s.size(); i++){if(s[i] == '?'){for(char ch = 'a'; ch <= 'z'; ch++){// || 短路设计比较精髓if((i == 0 || ch != s[i - 1]) && (i == n - 1 || ch != s[i + 1])){s[i] = ch;}}}}return s;
}

2.提莫攻击

1.题目链接

  • 提莫攻击

2.算法原理详解

  • 计算相邻两个时间点的差值:
    • 如果差值⼤于等于中毒时间,说明上次中毒可以持续duration
    • 如果差值⼩于中毒时间,那么上次的中毒只能持续两者的差值
      请添加图片描述

3.代码实现

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

3.N 字形变换

1.题目链接

  • N 字形变换

2.算法原理详解

  • 本题可以照本宣科的按照要求存储 && 读取,但是此时时间复杂度和空间复杂度都很高
  • 模拟题优化:找规律
    请添加图片描述

3.代码实现

string Convert(string s, int numRows) 
{// 处理边界情况if(numRows == 1){return s;}string ret;int n = s.size(), d = 2 * numRows - 2;// 第一行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;
}

4.外观数列

1.题目链接

  • 外观数列

2.算法原理详解

  • 思路:模拟 + 双指针

3.代码实现

// 控制逻辑 v1.0
// 自己控代码的逻辑
string CountAndSay(int n) 
{string src = "1";for(int i = 2; i <= n; i++) // 控制行{// 双指针string ret;int left = 0, right = 0;for(; right < src.size(); right++){if(src[left] != src[right]){ret += to_string(right - left) + src[left];left = right;}}// 处理最后的一组数ret += to_string(right - left) + src[left];src = ret;}return src;
}
--------------------------------------------------
// 控制逻辑 v2.0
// 此逻辑比较优秀,不需求额外处理结尾情况
string CountAndSay(int n) 
{string src = "1";for(int i = 2; i <= n; i++) // 控制行{// 双指针string ret;for(int left = 0, right = 0; right < src.size();){while(right < src.size() && src[left] == src[right]){right++;}ret += to_string(right - left) + src[left];left = right;}src = ret;}return src;
}

5.数青蛙

1.题目链接

  • 数青蛙

2.算法原理详解

  • 用哈希表来存储叫声

    请添加图片描述


3.代码实现

int MinNumberOfFrogs(string croakOfFrogs) 
{string str = "croak";int n = str.size();vector<int> hash(n); // 用数组模拟哈希unordered_map<char, int> index; // <ch, index>for(int i = 0; i < n; i++){index[str[i]] = i;}for(auto& ch : croakOfFrogs){if(ch == 'c'){if(hash[n - 1]) // k已存在{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];
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java后端利用百度地图全球逆地理编码,获取地址

声明&#xff1a;本人是在实习项目的时候遇到的问题 一.使用Api分为四步骤全球逆地理编码 rgc 反geo检索 | 百度地图API SDK 步骤1,2自行完成 接下来去获取AK 二.申请AK 登录百度账号 点击创建应用&#xff0c;选择自己想用的服务&#xff0c;我只单选了逆地理编码&#xff…

路由相关内容

路由相关 1. 路由&#xff08;Routing&#xff09;1.1 直连路由1.2 静态路由1.3 默认路由1.4 动态路由 2. 路由器&#xff08;AR&#xff09;2.1 路由器的工作原理2.1 路由器转发数据包的过程 3. linux中的路由相关操作3.1 route1. 查看路由表2. 三种路由类型说明3. 配置路由ro…

更新!!!Unity移动端游戏性能优化简谱

UWA官方出品&#xff0c;结合多年优化经验撰写了《Unity移动端游戏性能优化简谱》&#xff0c;文章从Unity移动端游戏优化的一些基础讨论出发&#xff0c;例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题&#xff0c;并展示了如何使用UWA的性能检测工…

DSP开发实战教程--EPWM模块的影子寄存器详细讲解原理和代码实例

EPWM模块影子寄存器的原理 在TI&#xff08;Texas Instruments&#xff09;的DSP28335中&#xff0c;EPWM&#xff08;Enhanced Pulse Width Modulator&#xff09;模块提供了高精度、高灵活性的PWM信号生成功能。为了能在不影响当前PWM波形输出的情况下预装载新的PWM参数&…

实现SpringMVC底层机制(一)

文章目录 1.环境配置1.创建maven项目2.创建文件目录3.导入jar包 2.开发核心控制器文件目录1.流程图2.编写核心控制器SunDispatcherServlet.java3.类路径下编写spring配置文件sunspringmvc.xml4.配置中央控制器web.xml5.配置tomcat&#xff0c;完成测试1.配置发布方式2.配置热加…

ubuntu查看opencveigen

ubuntu查看opencv&eigen&cmake版本的方法 eigen eigen版本号在/usr/include/eigen3/Eigen/src/Core/util/Macros.h文件中&#xff0c;下图代表版本3.3.7 opencv版本 pkg-config --modversion opencv4也可能最后的字符串是opencv2&#xff0c;opencv

采购数据分析驾驶舱分享,照着它抄作业

今天我们来看一张采购管理驾驶舱。这是一张充分运用了多种数据可视化图表、智能分析功能&#xff0c;从物料和供应商的角度全面分析采购情况的BI数据可视化报表&#xff0c;主要分为三个部分&#xff0c;接下来就分部分来了解一下。 第一部分&#xff1a;关键指标计算及颜色预…

Xcode for Mac:强大易用的集成开发环境

Xcode for Mac是一款专为苹果开发者打造的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它集成了代码编辑器、编译器、调试器等一系列开发工具&#xff0c;让开发者能够在同一界面内完成应用的开发、测试和调试工作。 Xcode for Mac v15.2正式版下载 Xcode支持多种编程…

大模型咨询培训老师叶梓:利用知识图谱和Llama-Index增强大模型应用

大模型&#xff08;LLMs&#xff09;在自然语言处理领域取得了显著成就&#xff0c;但它们有时会产生不准确或不一致的信息&#xff0c;这种现象被称为“幻觉”。为了提高LLMs的准确性和可靠性&#xff0c;可以借助外部知识源&#xff0c;如知识图谱。那么我们如何通过Llama-In…

Spark AQE 导致的 Driver OOM问题

背景 最近在做Spark 3.1 升级 Spark 3.5的过程中&#xff0c;遇到了一批SQL在运行的过程中 Driver OOM的情况&#xff0c;排查到是AQE开启导致的问题&#xff0c;再次分析记录一下&#xff0c;顺便了解一下Spark中指标的事件处理情况 结论 SQLAppStatusListener 类在内存中存…

【Jenkins】持续集成与交付 (一):深入理解什么是持续集成?

【Jenkins】持续集成与交付 (一):深入理解什么是持续集成? 1、软件开发生命周期与持续集成2、 持续集成的流程3、持续集成的好处4、Jenkins的应用实践5、结语💖The Begin💖点点关注,收藏不迷路💖 1、软件开发生命周期与持续集成 软件开发生命周期(SDLC)是指软件从…

【leetcode面试经典150题】75. 二叉树展开为链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…