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

算法练习——模拟题

前言:模拟题的特点在于没有什么固定的技巧,完全考验自己的代码能力,因此有助于提升自己的代码水平。如果说一定有什么技巧的话,那就是有的模拟题能够通过找规律来简化算法。

一:替换所有问号

题目要求:

解题思路:

思路:首先遍历字符串s找寻字符 '?';找到后,将'a'拷贝给该位置并循环++,直到中间字母和左右字母均不相同。

细节:左端点和右端点需要单独考虑

实现代码:

    string modifyString(string s) {int n  = s.size();for(int i = 0; i < n; 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;break;}}}}return s;}

分析:if((i == 0 || ch != s[i-1]) && (i == n-1 || ch != s[i+1])); 该串代码

一个条件涵盖三种情况:

①:左端点 i == 0; ch != s[i+1];

②:右端点 i == n-1;ch !=s[i-1];

③:中间点 ch !=s[i-1];ch != s[i+1];

学无止境 :-(

二:提莫攻击

题目要求:

解题思路:

思路

定义一个变量total,用于记录总共的中毒时间。

攻击间隔 >= 中毒时间,total+=d;

攻击间隔 <   中毒时间,total+=(攻击间隔的时间);

最后返回时,total+=d,因为最后一次的中毒时间一定是吃满的。

实现代码:

    int findPoisonedDuration(vector<int>& timeSeries, int duration) {int n = timeSeries.size();int total = 0;for(int i = 0; i < n-1; i++){int gap = timeSeries[i+1] - timeSeries[i];if(gap >= duration){total+=duration;}else{total += gap;}}return total+duration;}

三:Z字形变换

题目要求:

解题思路:

思路:这道题就是模拟题中典型的通过找规律来简化代码,以下通过下标来找寻规律。

实现代码:

    string convert(string s, int numRows) {if(numRows == 1) return s;int n = s.size();int gap = numRows*2 - 2;int gap1 = gap;int gap2 = 0;string tmp;for(int i = 1; i <= numRows; i++){int j = i-1;while((i == 1 || i == numRows) && j < n){tmp+=s[j];j+=gap; }while(i > 1 && i < numRows && j < n){tmp += s[j];j += gap1;if(j < n){tmp += s[j];j += gap2;}}gap1 -= 2;gap2 += 2;}return tmp;}

四:外观数列

题目要求:

解题思路:

分析:本题的难点(对编者我而言)在于把题目看懂

除了1,对于其他数字而言,下一个数字是对上一个数字解释

即:

countAndSay(1) = '1';  

countAndSay(2) = "1" 的行程长度编码 = "11"       解释:一个1;

countAndSay(3) = "11" 的行程长度编码 = "21"     解释:一个2,一个1

countAndSay(4) = "21" 的行程长度编码 = "1211" 解释:一个1,一个2,两个1, 

最后输出n对应的行程长度编码。

思路

定义一个变量 string s;

外循环遍历1~n,内循环遍历s,通过双指针法(pre cur)记录每个数字出现的次数,将数字以及其对应出现的个数分别记录到 string tmp中,当该次循环结束时,将 tmp 赋值给 s ,同时tmp清空tmp,用于记录下次循环的行程长度编码。

实现代码:

    string countAndSay(int n) {string s("1");for(int i = 1; i < n; i++){int pre = 0;int cur = 0;string tmp;while(cur < s.size()){int count = 0;while(cur < s.size() && s[cur] == s[pre]){count++;cur++;}tmp += to_string(count) + s[pre];pre = cur;}s = tmp;tmp.clear();}return s;}

to_string:将其他数据类型转换成string型

五:数青蛙

题目要求:

解题思路:

分析

        每一只青蛙都必须叫出完整的一声 "croak",但是可能存在示例2这样的情况,一只青蛙没叫完,另一只青蛙叫了。

        示例3不是有效的蛙声组合。因为一声完整的蛙声组合是 "croak",也就是说o的前面一定有一个字符'r',而示例3当连续两个o中,第一个o已经和前面一个r组成了一对,而第二个o前面没有r了,因此不符合蛙声("croak")的字符组合

       

思路

👉:定义一个 string s; 用于保存蛙声“croak”,

👉:定义一个 unordered_map<char,int> haxi 让字母与下标建立映射关系,

:此时 int index = haxi[字符] 就可以找到字符对应的下标

👉:定义一个 vector<int> tmp(s.size()) 下标从0开始到4,依次对应 c ~ k 五个字符以及其对应出现的个数

通过上述定义,就得到了如图所示的映射关系:

外循环遍历字符串croak0fFrogs

当遍历到除‘c’以外的其他字符时:判断 tmp中,前一个字符是否大于0

若大于0则,tmp[index]++; tmp[index-1]--;

若等于0则,说明当前字符串不是有效组合直接返回-1

循环结束时,此时 字符k的个数即为当前青蛙个数

当遍历到字符c时情况比较特殊:

①:如果k=0,说明这是某只青蛙第一次叫,tmp[index]++

②:如果k!=0,说明这可能是某只青蛙第二次叫,因此tmp[haxi[k]]--,tmp[index]++;

当上述循环结束时,要判断tmp中,除k以外是否存在其他字符,若存在,则返回-1。

实现代码:

        string s = "croak";int n = s.size();vector<int> tmp(n);unordered_map<char,int> haxi;for(int i = 0; i < n; i++){haxi[s[i]] = i; //建立哈希表中的映射关系}for(auto w : croakOfFrogs){int index = haxi[w];if(w == 'c'){if(tmp[n-1] > 0){tmp[n-1]--;  }tmp[0]++;}else{if(tmp[index-1] > 0){tmp[index-1]--;tmp[index]++;}else{return -1;}}}for(int i = 0; i < n-1; i++){if(tmp[i] > 0){return -1;}}return tmp[n-1];}

:博主尚未学习haxi表,这道题是haxi算法的第一次浅尝试,通过哈希表建立字符与下标之间的映射关系,再通过vector<int> 统计个数。不同字符→对应下标→对应个数。

相关文章:

算法练习——模拟题

前言&#xff1a;模拟题的特点在于没有什么固定的技巧&#xff0c;完全考验自己的代码能力&#xff0c;因此有助于提升自己的代码水平。如果说一定有什么技巧的话&#xff0c;那就是有的模拟题能够通过找规律来简化算法。 一&#xff1a;替换所有问号 题目要求&#xff1a; 解…...

京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率

2024 年度总结系列 2024 年 10 月&#xff0c;京东零售供应链技术团队凭借其在库存选品与调拨技术上的创新与实践&#xff0c;荣获运筹与管理学领域的国际顶级奖项 Daniel H. Wagner Prize。本文为您介绍获奖背后的供应链技术创新和落地应用。 00 摘要 在电商行业中&#x…...

pytorch张量的fill_方法介绍

在 PyTorch 中&#xff0c;fill_ 是一个张量的原地操作方法&#xff0c;用于将张量中的所有元素填充为指定的值。 方法签名 Tensor.fill_(value)参数 value (float or int): 要填充到张量中的值。 返回值 返回调用该方法的张量本身&#xff0c;且是经过修改后的张量。 特…...

WAP短信格式解析及在Linux下用C语言实现

WAP短信格式解析及在Linux下用C语言实现 一、引言二、WAP短信格式概述三、WAP短信头的内容四、UDHI与WAP短信体的关系五、在Linux下用C语言解析WAP短信头及短信体内容一、引言 在移动通信领域,短信作为一种古老却稳定的通信方式,一直扮演着重要的角色。随着技术的发展,短信…...

Linux的诞生与发展、体系结构与发行版本

Linux作为一个开源操作系统&#xff0c;在过去几十年中一直扮演着至关重要的角色。它不仅深刻影响了服务器、桌面和移动设备&#xff0c;还成为了开源运动的重要组成部分。本文将介绍Linux的历史、体系结构、以及主要的发行版&#xff0c;帮助你更好地了解Linux的方方面面。 一…...

为什么Mysql用B+树作为索引

首先&#xff0c;能作为索引的数据结构有很多&#xff0c;例如数组、链表、二叉树 数据和索引都是存储在磁盘里的。 我们通过索引来查询数据时&#xff0c;先从磁盘读取索引到内存&#xff0c;再通过索引从磁盘中找到某行数据&#xff0c;然后读入到内存。 要设计一个适合 MySQ…...

探索 DC-SDK:强大的 3D 地图开发框架

在现代 Web 开发中&#xff0c;地理信息系统&#xff08;GIS&#xff09;和 3D 地图可视化变得越来越重要。dc-sdk 是一个基于 Cesium 的开源 WebGL 地图开发框架&#xff0c;它提供了丰富的地图可视化功能和简单易用的 API&#xff0c;使开发者能够轻松地在 Web 应用中集成 3D…...

C#高级篇 反射和属性详解【代码之美系列】

&#x1f380;&#x1f380;&#x1f380;代码之美系列目录&#x1f380;&#x1f380;&#x1f380; 一、C# 命名规则规范 二、C# 代码约定规范 三、C# 参数类型约束 四、浅析 B/S 应用程序体系结构原则 五、浅析 C# Async 和 Await 六、浅析 ASP.NET Core SignalR 双工通信 …...

算法 class 005 (对数器C语言实现)

对数器的概念&#xff1a; 用来测试你的算法是否正确。 怎么做呢&#xff1f; 1&#xff1a;比如&#xff0c;写个冒泡排序&#xff0c;作为对比的对象 2&#xff1a;生成一个随机数 数组&#xff0c;用来测试 3&#xff1a;用冒泡排序和你想要验证的那个排序算法&#xff0c;同…...

windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter

1.在win主菜单中找到Anaconda安装文件夹并打开终端 文件夹内有所有安装后的Anaconda的应用软件和终端窗口启动窗口 点击Anaconda Prompt&#xff08;Anaconda&#xff09;就会打开类似cmd的命令终端窗口&#xff0c;默认打开的路径是用户名下的路径 2.激活虚拟环境 使用命令…...

leetcode 面试经典 150 题:矩阵置零

链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1]…...

SQL中的TRIM用法

TRIM 是 SQL 中用于去除字符串两端&#xff08;左侧和右侧&#xff09;的空格或特定字符的函数。这个函数常用于清理数据中的无效空白字符&#xff0c;尤其是在从外部系统导入数据时&#xff0c;常常会遇到数据两端有不必要的空格&#xff0c;使用 TRIM 可以去除这些多余的字符…...

Git Flow 工作流:保障修改不破坏主功能的完整指南20241230

Git Flow 工作流&#xff1a;保障修改不破坏主功能的完整指南 引言 在团队协作和个人项目中&#xff0c;Git Flow 是一种可靠的分支管理策略。通过清晰的分工和规范的流程&#xff0c;它能有效保障代码改动的安全性&#xff0c;避免修改破坏主功能&#xff0c;同时提高开发效…...

CentOS 7安装Docker详细教程

本文以 CentOS7.8 为例安装 Docker 26.1.4 、Docker Compose、以及 Docker 镜像仓库。 1.安装Docker社区版 1.1 安装准备 1.1.1 检查系统环境 Docker 不支持32位的 CentOS 7 系统&#xff0c;要求系统内核版本为3.10 以上&#xff0c;可以通过命令 uname -r 来查看当前系统…...

如何在 Ubuntu 22.04 上安装 Varnish HTTP 教程

简介 在本教程中&#xff0c;我们将学习如何在 Ubuntu 22.04 服务器上安装和配置 Varnish HTTP。 Varnish 是一款高性能的 HTTP 加速器&#xff0c;旨在提高内容密集型动态网站的速度。它通过将网页缓存在内存中来工作&#xff0c;从而减少 Web 服务器的负载&#xff0c;并显…...

网络安全概念详解

人们对网络安全工程师的有哪些误会&#xff1f; “你们搞安全的盗个微信号/ QQ号应该很简单吧&#xff1f;” 说起来&#xff0c;我们经常说安全、安全&#xff0c;网络安全到底是什么&#xff1f; 一、什么是网络安全&#xff1f; “网络安全是指网络系统的硬件、软件及其…...

【前端】-音乐播放器(源代码和结构讲解,大家可以将自己喜欢的歌曲添加到数据当中,js实现页面动态显示音乐)

前言&#xff1a;音乐播放器是前端开发中的一个经典项目&#xff0c;通过它可以掌握很多核心技术&#xff0c;如音频处理、DOM操作、事件监听、动画效果等。这个项目不仅能提升前端开发的技能&#xff0c;还能让开发者深入理解JavaScript与HTML的协同作用。 页面展示&#xff1…...

PawSQL性能巡检平台 (3) - 慢查询采集和优化

在数据库运维管理中&#xff0c;慢查询一直是影响系统性能的重要因素。本文将详细介绍PawSQL数据库性能巡检平台在慢查询管理和优化方面的功能特性&#xff0c;帮助数据库管理员更好地应对性能挑战。 一、PawSQL巡检平台慢查询管理概述 PawSQL平台提供了全面的慢查询管理功能&…...

在docker中对MySQL快速部署与初始数据

1.准备工作 将已经准备好的Dockerfile文件与数据库初始化脚本init.sql放到 /usr/local目录中。 Dockerfile文件内容&#xff1a; FROM mysql:5.7 WORKDIR /docker-entrypoint-initdb.d ADD init.sql . FROM 代表来自mysql5.7的镜像&#xff0c;作为基准镜像。 WORKDIR设置工…...

Mysql(MGR)和ProxySQL搭建部署-Kubernetes版本

一、Mysql(MGR) 1.1 statefulSet.yaml apiVersion: apps/v1 kind: StatefulSet metadata:labels:app: mysqlname: mysqlnamespace: yihuazt spec:replicas: 3serviceName: mysql-headlessselector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:affinity:p…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...