【算法专场】模拟(上)

news2024/9/20 10:38:28

目录

​前言

模拟算法

1576. 替换所有的问号 

495. 提莫攻击

 1688. 比赛中的配对次数

 6. Z 字形变换


前言

我们在有时候会看到刷题网站上面看到一些已经把题意讲的很明确的题目,并且一般这种不怎么需要利用那些复杂的算法,只需要我们按照着题目的意思就能够写出来,这种就是---模拟算法

模拟算法

模拟算法本质上就是比葫芦画瓢

我们只需要根据题目要求即可解答,但需要注意细节。

一般模拟的过程,我们需要在草稿纸上进行模拟,考虑某些细节问题,在模拟完之后根据演算的过程将代码一步步写出来。

接下来我们来练习一下

1576. 替换所有的问号 

通过上面的板书,那么我们就可以将演算的过程转化为以下代码:

class Solution {
    public String modifyString(String ss) {
        // 将字符串转为字符数组
        char[] s = ss.toCharArray();
        // 获取zifushu
        int n = s.length;
        for (int i = 0; i < n; 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;
                        // 替换完毕,停止循环
                        break;
                    }
                }
            }
        }
        // 返回字符串
        return String.valueOf(s);
    }
}

 时空复杂度为O(n),n为字符串长度。

495. 提莫攻击

将图中的演算过程转化为代码:

class Solution {
    public int findPoisonedDuration(int[] timeSeries, int duration) {
        //用来存储最终结果
        int ans=0;
        //遍历,从1开始
        for(int i=1;i<timeSeries.length;i++){
            int x=timeSeries[i]-timeSeries[i-1];
            if(x>=duration) ans+=duration;
            else ans+=x;
        }
        return ans+duration;
    }
}

 1688. 比赛中的配对次数

将上述转换为代码:

class Solution {
    public int numberOfMatches(int n) {
         int ans=0;
         while(n!=1){
             if(n%2==1){//奇数,比赛次数为(n-1)/2
                 sum+=(n-1)/2;
                 n=(n-1)/2+1;
             }else{//偶数,比赛次数为n/2
                 sum+=n/2;
                 n/=2;
             }
         }
         return ans;
     }
}

 6. Z 字形变换

将上述转换为代码:

/**
 * 将给定的字符串按照Z字形排列后,按行读取并返回结果字符串
 * Z字形排列是指字符串在numRows行中按顺序排列,第一行和最后一行除外,其它行在两端对齐
 * 例如,"PAYPALISHIRING"在3行中按Z字形排列后,按行读取的结果是"PAHNAPLSIIGYIR"
 *
 * @param s 输入的字符串
 * @param numRows 字符串排列的行数
 * @return 按Z字形排列后按行读取的字符串
 */
public String convert(String s, int numRows) {
    // 判断特殊情况,如果行数为1,直接返回原字符串
    if (numRows == 1) return s;
    
    // 创建一个字符串
    StringBuffer sb = new StringBuffer();
    // 获取输入字符串的长度
    int n = s.length();
    // 公差,用于计算每个字符在字符串中的位置增量
    int d = numRows * 2 - 2;
    
    // 处理第一行
    for (int i = 0; i < n; i += d) {
        sb.append(s.charAt(i));
    }
    
    // 处理中间行
    for (int k = 1; k < numRows - 1; k++) {
        for (int i = k, j = d - k; i < n; i += d, j += d) {
            sb.append(s.charAt(i));
            if (j < n) {
                sb.append(s.charAt(j));
            }
        }
    }
    
    // 处理最后一行
    for (int i = numRows - 1; i < n; i += d) {
        sb.append(s.charAt(i));
    }
    
    // 将字符串缓冲区转换为字符串并返回
    return sb.toString();
}

以上就是模拟上篇的全部内容咯~

若有不足,欢迎指正~ 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宝藏!《联盟现代控制特训班题库》(麒麟篇) 习题部分:甄选内容

本文内容&#xff0c;全部选自联盟自动化考研联盟企业店( 店)的&#xff1a;初试《现代控制特性班题库》(麒麟篇)&#xff0c;分为讲义和习题两个部分&#xff0c;本文为习题部分的甄选内容&#xff0c;一本书帮你学透现控。 目录 Part1&#xff1a;资料封面&目录 习题部…

Kafka大厂面试14问(附答案)

怎么保证顺序消费&#xff1f; 同一个生产者发送到同一分区的消息&#xff0c;先发送的比后发送的offset要小。同一生产者发送到不同分区的消息&#xff0c;消息顺序无法保证。 怎么解决这个问题&#xff1f; 给一个topic只设置一个分区 相同key会发给一个分区 怎么保证幂…

python常用的列表,元组,字符串,集合,字典的应用方法

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6049c6f7ca2d4a0ca4911562dea7a8cd.png 素材内容来自——黑马程序员

【Altium Designer程序开发】生成XML多级数据库文件 V2.0

此工具用于生成多级多节点的XML数据库文件&#xff0c;主要功能用于测试XML文件的生成速度的&#xff0c;运行环境在Altium Designer中&#xff0c;可用于Altium Designer全系列的版本中。 程序界面如下图所示&#xff0c;每一级节点表示每个父Node的子Node的数量&#xff0c;节…

FRP内网穿透与神卓互联,优势对比

本文介绍分析了当前市面上两款常用的内网穿透工具 frp内网穿透介绍 一、概述 frp&#xff08;Fast Reverse Proxy&#xff09;是一款高性能的反向代理应用&#xff0c;主要用于实现内网穿透功能。通过frp&#xff0c;用户可以将内网中的服务器或服务暴露到公网上&#xff0c;…

跨境电商运营解决方案:反向代购系统物流集运一体化

跨境电商两种模式&#xff0c;一种是国外商品卖到国内&#xff0c;海淘代购。另一种是国内商品卖到国外&#xff0c;也叫反向代购。 什么是反向代购 反向代购是近年兴起的一种购物模式&#xff0c;是帮国外客户购买中国商品。主要是通过外贸代购系统&#xff0c;把淘宝、天猫…

AEC-Q100车规芯片验证

AEC-Q100是汽车电子协会(Automotive Electronics Council,简称AEC)制定的车规级芯片验证标准,它主要针对车载应用的集成电路产品所设计的一套应力测试标准,旨在通过严格的测试流程,确保芯片在复杂多变的汽车环境下具备高可靠性、高安全性和高稳定性。 验证流程 定义规格:…

哪款清理猫咪浮毛效果好?希喂、霍尼韦尔、美的宠物空气净化器PK

最近在宠物领域&#xff0c;宠物空气净化器的讨论热度很高&#xff0c;不少铲屎官们都有购买的意向。身为三猫孩子的家长&#xff0c;养宠以来市面上所有的猫毛清理工具我都用过&#xff0c;这种新兴产品肯定也不会错过。我结合自身情况和预算&#xff0c;对市面上的品牌进行筛…

UI自动化-元素动作WebElement源码类

UI自动化设计元素动作所用到的源码是WebElement源码类 其中用的最多的为前9个&#xff0c;后续是前端开发时常用 webelement源码类 元素动作都是webelement源码类中 1、往输入框里输入内容&#xff0c;元素单击后输入内容&#xff1a;key的值是要查找的值 获取标签的名称 tagn…

【Linux网络编程】协议|OSI模型|TCP/IP模型|局域网通信|跨网络通信|地址管理|流程图

目录 ​编辑 一&#xff0c;协议 协议分层 二&#xff0c;OSI七层模型 三&#xff0c;TCP/IP五层&#xff08;或四层&#xff09;模型 TCP/IP各个层次一些名词解释 为什么要有TCP/IP协议 TCP/IP协议栈与操作系统的宏观关系示意图 四&#xff0c;网络传输基本流程 局…

华为云征文|Flexus云服务X实例使用,宝塔的安装,利用宝塔安装Java、NGINX,Redis,Python,快速搭建开发环境

引出 4核12G-100G-3M规格的Flexus X实例使用测评第4弹&#xff1a;Flexus云服务X实例使用&#xff0c;宝塔的安装&#xff0c;利用宝塔安装Java、NGINX&#xff0c;redis&#xff0c;Python&#xff0c;快速搭建开发环境 什么是Flexus云服务器X实例 官方解释&#xff1a; Fl…

openharmony历程一:安装ubuntu20.04

1.下载ubuntu20.04 官网下载 下拉选择 可使用镜像&#xff1a; 镜像 2.安装 本人使用vmware,其他的如virtualbox也差不多 选择自定义和下一步 我使用的是r5 5600H&#xff0c;只有12核。 由于后面用于鸿蒙安装&#xff0c;推荐内存16GB及以上&#xff0c;硬盘100GB及…

L1-100 四项全能

作者 陈越 单位 浙江大学 新浪微博上有一个帖子给出了一道题&#xff1a;全班有 50 人&#xff0c;有 30 人会游泳&#xff0c;有 35 人会篮球&#xff0c;有 42 人会唱歌&#xff0c;有 46 人会骑车&#xff0c;至少有&#xff08; &#xff09;人四项都会。 发帖人不会做这道…

【原创教程】电气电工15:线槽导轨

电气电工这些知识点,我们描述的比较细,虽然看起来比较简单,但是它是后面我们技能提升的基础,如果我们后面学电气工程师相关知识,这些都属于基本功。 接着我们来看一下线槽导轨。 线槽又名走线槽、配线槽、行线槽(因地方而异),是用来将电源线、数据线等线材规范的整理…

【深入了解Java常用类】

前言&#xff1a;Java中的常用类主要提供了广泛的工具和功能&#xff0c;用于简化开发任务&#xff0c;处理常见的编程需求。前面我们已经介绍过String类的一些基本使用方法&#xff0c;接下来我们再介绍一些其它常用类的使用&#xff0c;本文主要介绍以包装类Integer为例、Mat…

SQL语句--DML

DML:Data Manipulation Language(数据操作语言&#xff09;&#xff0c;对表的数据记录增删改查 添加数据 INSERT修改数据UPDATA删除数据 DELETE 给指定字段添加数据&#xff1a; INSERT INTO 表名&#xff08;字段名1&#xff0c;字段名2&#xff0c;...) VALUES(值1&#xf…

设计模式-原型适配器桥接外观

3.3原型模式&#xff08;代码见vs&#xff09; 原型模式就是自我复制。原型模式的核心是一个clone()方法&#xff0c; 对于C来说&#xff0c;其实就是拷贝构造函数&#xff0c;需要实现深拷贝。拷贝构造函数根据谁来拷贝才能实现自我复制呢&#xff1f;答案就是根据自己复制自己…

语言质量评估对欧洲游戏推广的重要性

语言质量评估在欧洲推广游戏中的重要性怎么强调都不为过。欧洲是一个文化和语言多样化的市场&#xff0c;整个大陆有200多种语言。因此&#xff0c;要提供一款与不同地区玩家产生共鸣的本地化游戏&#xff0c;不仅需要准确的翻译&#xff0c;还需要细致的语言质量评估。这一过程…

mysql高级sql

一&#xff0c;查询 1.按关键字排序 1.1用 **ORDER BY** 语句来实现排序&#xff1a; - ORDER BY 语句用于对查询结果进行排序。可以根据一个或多个字段的值进行升序&#xff08;ASC&#xff09;或降序&#xff08;DESC&#xff09;排序。1.2排序可针对一个或多个字段&#…

【运维监控】prometheus+node exporter+grafana 监控linux机器运行情况(2)

本示例是通过prometheus的node exporter收集主机的信息&#xff0c;然后在grafana的dashborad进行展示。本示例使用到的组件均是最新的&#xff0c;下文中会有具体版本说明&#xff0c;linux环境是centos。本示例分为四个部分&#xff0c;即prometheus、grafana、node exporter…