算法练习——模拟题
前言:模拟题的特点在于没有什么固定的技巧,完全考验自己的代码能力,因此有助于提升自己的代码水平。如果说一定有什么技巧的话,那就是有的模拟题能够通过找规律来简化算法。
一:替换所有问号
题目要求:
解题思路:
思路:首先遍历字符串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> 统计个数。不同字符→对应下标→对应个数。
相关文章:

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

京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率
2024 年度总结系列 2024 年 10 月,京东零售供应链技术团队凭借其在库存选品与调拨技术上的创新与实践,荣获运筹与管理学领域的国际顶级奖项 Daniel H. Wagner Prize。本文为您介绍获奖背后的供应链技术创新和落地应用。 00 摘要 在电商行业中&#x…...
pytorch张量的fill_方法介绍
在 PyTorch 中,fill_ 是一个张量的原地操作方法,用于将张量中的所有元素填充为指定的值。 方法签名 Tensor.fill_(value)参数 value (float or int): 要填充到张量中的值。 返回值 返回调用该方法的张量本身,且是经过修改后的张量。 特…...

WAP短信格式解析及在Linux下用C语言实现
WAP短信格式解析及在Linux下用C语言实现 一、引言二、WAP短信格式概述三、WAP短信头的内容四、UDHI与WAP短信体的关系五、在Linux下用C语言解析WAP短信头及短信体内容一、引言 在移动通信领域,短信作为一种古老却稳定的通信方式,一直扮演着重要的角色。随着技术的发展,短信…...
Linux的诞生与发展、体系结构与发行版本
Linux作为一个开源操作系统,在过去几十年中一直扮演着至关重要的角色。它不仅深刻影响了服务器、桌面和移动设备,还成为了开源运动的重要组成部分。本文将介绍Linux的历史、体系结构、以及主要的发行版,帮助你更好地了解Linux的方方面面。 一…...

为什么Mysql用B+树作为索引
首先,能作为索引的数据结构有很多,例如数组、链表、二叉树 数据和索引都是存储在磁盘里的。 我们通过索引来查询数据时,先从磁盘读取索引到内存,再通过索引从磁盘中找到某行数据,然后读入到内存。 要设计一个适合 MySQ…...
探索 DC-SDK:强大的 3D 地图开发框架
在现代 Web 开发中,地理信息系统(GIS)和 3D 地图可视化变得越来越重要。dc-sdk 是一个基于 Cesium 的开源 WebGL 地图开发框架,它提供了丰富的地图可视化功能和简单易用的 API,使开发者能够轻松地在 Web 应用中集成 3D…...

C#高级篇 反射和属性详解【代码之美系列】
🎀🎀🎀代码之美系列目录🎀🎀🎀 一、C# 命名规则规范 二、C# 代码约定规范 三、C# 参数类型约束 四、浅析 B/S 应用程序体系结构原则 五、浅析 C# Async 和 Await 六、浅析 ASP.NET Core SignalR 双工通信 …...

算法 class 005 (对数器C语言实现)
对数器的概念: 用来测试你的算法是否正确。 怎么做呢? 1:比如,写个冒泡排序,作为对比的对象 2:生成一个随机数 数组,用来测试 3:用冒泡排序和你想要验证的那个排序算法,同…...

windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter
1.在win主菜单中找到Anaconda安装文件夹并打开终端 文件夹内有所有安装后的Anaconda的应用软件和终端窗口启动窗口 点击Anaconda Prompt(Anaconda)就会打开类似cmd的命令终端窗口,默认打开的路径是用户名下的路径 2.激活虚拟环境 使用命令…...

leetcode 面试经典 150 题:矩阵置零
链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1]…...
SQL中的TRIM用法
TRIM 是 SQL 中用于去除字符串两端(左侧和右侧)的空格或特定字符的函数。这个函数常用于清理数据中的无效空白字符,尤其是在从外部系统导入数据时,常常会遇到数据两端有不必要的空格,使用 TRIM 可以去除这些多余的字符…...

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

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

如何在 Ubuntu 22.04 上安装 Varnish HTTP 教程
简介 在本教程中,我们将学习如何在 Ubuntu 22.04 服务器上安装和配置 Varnish HTTP。 Varnish 是一款高性能的 HTTP 加速器,旨在提高内容密集型动态网站的速度。它通过将网页缓存在内存中来工作,从而减少 Web 服务器的负载,并显…...
网络安全概念详解
人们对网络安全工程师的有哪些误会? “你们搞安全的盗个微信号/ QQ号应该很简单吧?” 说起来,我们经常说安全、安全,网络安全到底是什么? 一、什么是网络安全? “网络安全是指网络系统的硬件、软件及其…...

【前端】-音乐播放器(源代码和结构讲解,大家可以将自己喜欢的歌曲添加到数据当中,js实现页面动态显示音乐)
前言:音乐播放器是前端开发中的一个经典项目,通过它可以掌握很多核心技术,如音频处理、DOM操作、事件监听、动画效果等。这个项目不仅能提升前端开发的技能,还能让开发者深入理解JavaScript与HTML的协同作用。 页面展示࿱…...

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

在docker中对MySQL快速部署与初始数据
1.准备工作 将已经准备好的Dockerfile文件与数据库初始化脚本init.sql放到 /usr/local目录中。 Dockerfile文件内容: FROM mysql:5.7 WORKDIR /docker-entrypoint-initdb.d ADD init.sql . FROM 代表来自mysql5.7的镜像,作为基准镜像。 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…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
el-amap-bezier-curve运用及线弧度设置
文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...

论文笔记:Large Language Models for Next Point-of-Interest Recommendation
SIGIR 2024 1 intro 传统的基于数值的POI推荐方法在处理上下文信息时存在两个主要限制 需要将异构的LBSN数据转换为数字,这可能导致上下文信息的固有含义丢失仅依赖于统计和人为设计来理解上下文信息,缺乏对上下文信息提供的语义概念的理解 ——>使用…...