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

算法 —— 模拟

目录

替换所有的问号 

提莫攻击

Z字形变换

外观数列


各位读者有听说过“建模”一词吗?所谓“建模”,就是把事物进行抽象,根据实际问题来建立对应的数学模型。“抽象”并不意味着晦涩难懂;相反,它提供了大量的便利。计算机很难直接去解决实际问题,但是如果把实际问题建模成数学问题,就会大大地方便计算机来“理解”和“解决”。

举个生活中常见的例子:我们拿到了某次数学考试的成绩单,现在需要知道谁考得最好。当然不能把成绩单对着电脑晃一晃,然后问“谁考得最好?”。需要通过一种途径让计算机来理解这个问题。这个问题可以建模成:“给定数组 score[],问数组内元素的最大值”。这样建模后,就能很方便的写程序解决问题了。对于这个问题,采用之前讨论过的“擂台法”,就可以给出答案。


替换所有的问号 

class Solution {
public:string modifyString(string s) {int n = s.size();for (int i = 0; i < n; i++)if (s[i] == '?')for (char c = 'a'; c <= 'z'; c++)// 注意边界情况 如果?在首字母或尾字母位置,只需要考虑后面一个字母即可if ((i == 0 || s[i - 1] != c) && (i == n - 1 || s[i + 1] != c)){s[i] = c;break;}return s;}
};

提莫攻击

class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int n = timeSeries.size(), sum = duration; // 最后一个时刻吃一层满毒for (int i = 1; i < n; i++){int tmp = timeSeries[i] - timeSeries[i - 1];if (tmp >= duration) // 时间差距大于等于中毒时间,意味着吃一层满毒sum += duration;else   // 时间差距小于中毒时间,意味着时差段中持续中毒sum += tmp;}return sum;}
};

Z字形变换

 本题可以用两种方法解决,第一种使用模拟,具体操作方法可以阅读蛇形方阵那一篇文章,第二种查找规律,可以发现每一行的元素都与公差存在规律,在找到规律后注意验证。

class Solution {
public:string convert(string s, int numRows) {string ret;if (numRows == 1)return s;int d = 2 * numRows - 2, n = s.size();// 处理第一行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;}
};

外观数列

 本题首先要理解题目意思:下一行为上一行的读写数字,即第一行是1个1,那么第二行就是11,第三行根据第二行的2个1所以为21……以此类推,代码如下:

class Solution {
public:string countAndSay(int n) {string ret = "1";for (int i = 1; i < n; i++) // 解释 n - 1 次{string tmp;int len = ret.size();for (int left = 0, right = 0; right < len;){while (right < len && ret[left] == ret[right])right++;tmp += to_string(right - left) + ret[left];  // right - left为个数 left = right;}ret = tmp;}return ret;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【JavaEE】网络编程——UDP
  • 工程化-vue3+ts:代码检测工具 ESLint
  • C++入门到进阶(图文详解,持续更新中)
  • Qt学生管理系统(付源码)
  • 解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数
  • IOC、DI<4> Unity、AOP、MVCAOP、UnityAOP 区别
  • python编程实例 输出两个数之间的素数
  • Vue中实现在线画流程图实现
  • 解决后端限制导致前端配置跨域仍请求失败报504的问题
  • 如何在 Ubuntu 16.04 上安装和配置 Zabbix 以安全监控远程服务器
  • 应急响应-战后溯源反制社会工程学
  • C++ 实现图书馆资料管理系统
  • lvs集群、NAT模式和DR模式、keepalive
  • wifi中的PSR技术
  • Java Stream API详解:高效处理集合数据的利器
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【刷算法】从上往下打印二叉树
  • 2019年如何成为全栈工程师?
  • Android单元测试 - 几个重要问题
  • CSS相对定位
  • docker-consul
  • happypack两次报错的问题
  • IndexedDB
  • python学习笔记-类对象的信息
  • Spring Cloud Feign的两种使用姿势
  • SpriteKit 技巧之添加背景图片
  • swift基础之_对象 实例方法 对象方法。
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 理解在java “”i=i++;”所发生的事情
  • 前端工程化(Gulp、Webpack)-webpack
  • 小而合理的前端理论:rscss和rsjs
  • 一个JAVA程序员成长之路分享
  • 应用生命周期终极 DevOps 工具包
  • 用Python写一份独特的元宵节祝福
  • No resource identifier found for attribute,RxJava之zip操作符
  • NLPIR智能语义技术让大数据挖掘更简单
  • Spring Batch JSON 支持
  • Spring第一个helloWorld
  • #define
  • (C语言)字符分类函数
  • (Java数据结构)ArrayList
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Qt) 默认QtWidget应用包含什么?
  • (第61天)多租户架构(CDB/PDB)
  • (第一天)包装对象、作用域、创建对象
  • (六)软件测试分工
  • (算法)大数的进制转换
  • (一)基于IDEA的JAVA基础1
  • (转)用.Net的File控件上传文件的解决方案
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core 中插件式开发实现
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET连接MongoDB数据库实例教程