算法: 模拟题目练习
文章目录
- 模拟
- 替换所有的问号
- 提莫攻击
- Z 字形变换
- 外观数列
- 数青蛙
- 总结
模拟
替换所有的问号

按照题目的要求写代码即可~
public String modifyString(String ss) {int n = ss.length();if (n == 1) {return "a";}char[] s = ss.toCharArray();for (int i = 0; i < n; i++) {if (s[i] == '?') {for (char ch = 'a'; ch <= 'z'; ch++) {if (i == 0 && ch != s[i + 1]) {// 第一个s[i] = ch;} else if (i == n - 1 && ch != s[i - 1]) {// 最后一个s[i] = ch;}if (0 < i && i < n - 1 && ch != s[i + 1] && ch != s[i - 1]) {// 中间s[i] = ch;}}}}return String.valueOf(s);}
题解写的更加简洁.
题解代码:
public String modifyString(String ss) {int n = ss.length();char[] s = ss.toCharArray();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);}
提莫攻击

草稿:

public int findPoisonedDuration(int[] timeSeries, int duration) {int tmp = timeSeries[0] + duration - 1;int sum = duration;for (int i = 1; i < timeSeries.length; i++) {if (tmp >= timeSeries[i]) {sum += timeSeries[i] - timeSeries[i - 1];} else {sum += duration;}tmp = timeSeries[i] + duration - 1;}return sum;}
题解代码:
草图:

public int findPoisonedDuration(int[] timeSeries, int duration) {int sum = 0;for (int i = 1; i < timeSeries.length; i++) {int tmp = timeSeries[i] - timeSeries[i - 1];if (tmp > duration) {sum += duration;} else {sum += tmp;}}return sum + duration;}
Z 字形变换

虽然过了,但是稀里糊涂地过了~
开头和结尾都好说,主要是中间,不知道为啥要 - 2*i.
规律就是这样的~
做题思路就是:
- 题目让干啥,我们就干啥
- 画图找规律~
坑:
- numRows 可能为 1 .
- 放中间元素时,容易越界.
代码:
public String convert(String ss, int numRows) {if (numRows == 1)return ss;char[] s = ss.toCharArray();int n = s.length;char[] ret = new char[n];int gap = (numRows - 1) * 2;int k = 0;// 开头for (int j = 0; j < n; j += gap) {ret[k++] = s[j];}// 中间for (int i = 1; i <= numRows - 2; i++) {for (int j = i; j < n; j += gap) {ret[k++] = s[j];// 这里为啥 - i*2 就对了?int mid = j + gap - i * 2;if (mid < n) {ret[k++] = s[mid];}}}// 结尾for (int j = numRows - 1; j < n; j += gap) {ret[k++] = s[j];}return String.valueOf(ret);}
外观数列

终于过了~
不知道为啥,自己写的代码返回的结果一直只有两个数. 在这上面耗了20多分钟.
最后全删了.心态崩了呀.
吃完饭回来,重写了一遍,只用了不到6分钟就写出来了.
坑:
- 不用考虑怎么替换的问题,最开始我也被题目带偏了.如果用替换来写,需要考虑的情况就复杂了. 其实直接新建一个字符串,不断向这个字符串后面拼接就行了.
public String countAndSay(int n) {StringBuilder ret = new StringBuilder("1");for (int i = 1; i < n; i++) {StringBuilder tmp = new StringBuilder();int len = ret.length();int left = 0, right = 0;while (right < len) {while (right < len && ret.charAt(left) == ret.charAt(right)) {right++;}tmp.append(right - left);tmp.append(ret.charAt(left));left = right;}ret = tmp;}return ret.toString();}
数青蛙

最后一个测试用例卡了好久.
坑:
- 如何判断给出的字符串不是 “croak” 的有效组合? 可以用最后的 sum 来判断,如果 sum 没有减到0,那就说明字符串不完整.
public int minNumberOfFrogs(String croakOfFrogs) {if (croakOfFrogs.length() < 5 || croakOfFrogs.length() % 5 != 0) {return -1;}int sum = 0;int ret = 0;char[] str = {'c', 'r', 'o', 'a', 'k'};HashMap<Character, Integer> hash = new HashMap<>();HashMap<Character, Character> hash2 = new HashMap<>();for (int i = 1; i < 5; i++) {hash2.put(str[i], str[i - 1]);}int n = croakOfFrogs.length();for (int i = 0; i < n; i++) {char ch = croakOfFrogs.charAt(i);hash.put(ch, hash.getOrDefault(ch, 0) + 1);if (ch != 'c' && hash.getOrDefault(ch, 0) > hash.getOrDefault(hash2.get(ch), 0)) {return -1;}if (ch == 'c') {sum++;} else if (ch == 'k') {ret = Math.max(ret, sum);sum--;}}if (sum != 0) return -1;return ret;}
看了题解后又自己写了一遍:

public int minNumberOfFrogs(String croakOfFrogs) {String str = "croak";HashMap<Character, Integer> hashIndex = new HashMap<>();for (int i = 0; i < 5; i++) {hashIndex.put(str.charAt(i), i);}HashMap<Character, Integer> hashCount = new HashMap<>();int n = croakOfFrogs.length();for (int i = 0; i < n; i++) {char ch = croakOfFrogs.charAt(i);if (ch != 'c') {// r,o,a,kchar prev = str.charAt(hashIndex.get(ch) - 1);int pervCount = hashCount.getOrDefault(prev, 0);if (pervCount > 0) {hashCount.put(prev, pervCount - 1);hashCount.put(ch, hashCount.getOrDefault(ch, 0) + 1);} else if (pervCount <= 0) {return -1;}} else {// cif (hashCount.getOrDefault('k', 0) > 0) {hashCount.put('k', hashCount.get('k') - 1);}hashCount.put(ch, hashCount.getOrDefault(ch, 0) + 1);}}// 检验给出的字符串是不是 "croak" 的有效组合。for (int i = 0; i < 4; i++) {if (hashCount.get(str.charAt(i)) != 0) {return -1;}}return hashCount.get('k');}
题解代码:
- 使用数组替代了 hash 表.
public int minNumberOfFrogs(String c) {char[] croakOfFrogs = c.toCharArray();String str = "croak";int n = str.length();int[] hash = new int[n];HashMap<Character, Integer> index = new HashMap<>();// 建立字母和下标的关系for (int i = 0; i < n; i++) {index.put(str.charAt(i), i);}for (char ch : croakOfFrogs) {if (ch != 'c') {// r,o,a,kint i = index.get(ch);if (hash[i - 1] > 0) {hash[i - 1]--;hash[i]++;} else {return -1;}} else {// cif (hash[n - 1] > 0)hash[n - 1]--;hash[0]++;}}for (int i = 0; i < n - 1; i++) {if (hash[i] != 0) return -1;}return hash[n - 1];}
看题解看到了一个 if else 大法 :
public int minNumberOfFrogs(String croakOfFrogs) {int c,r,o,a,k;c = 0; r = 0; o = 0; a = 0;k = 0;char []chars = croakOfFrogs.toCharArray();int res = 0;for(int i = 0;i < chars.length;i++){if(chars[i] == 'c'){if(k > 0){k--;}else{res++;}c++;}else if(chars[i] == 'r'){c--;r++;}else if(chars[i] == 'o'){r--;o++;}else if(chars[i] == 'a'){o--;a++;}else if(chars[i] == 'k'){a--;k++;}if(c < 0 || r < 0 || o < 0 || a < 0){break;}}if(c != 0 || r != 0 || o != 0 || a != 0){return -1;}return res;}
总结
- 做模拟题时, 题目说啥咱干啥~
- 有难度的模拟题需要我们找规律.
- 画图是个好东西.
本文到这里就结束啦~

相关文章:
算法: 模拟题目练习
文章目录 模拟替换所有的问号提莫攻击Z 字形变换外观数列数青蛙 总结 模拟 替换所有的问号 按照题目的要求写代码即可~ public String modifyString(String ss) {int n ss.length();if (n 1) {return "a";}char[] s ss.toCharArray();for (int i 0; i < n; i…...
软考中级科目怎么选?软考中级证书有什么用?
❇有计算机背景: 建议选择软件设计师或网络工程师。软件设计师更适合软件工程专业的同学报考,而网络工程师更适合网络工程专业的朋友(仅供参考)。 ❇没有计算机背景: 建议选择系统集成项目管理工程师作为入门科目。…...
HTTP 请求的请求体是什么
HTTP 请求的请求体(request body)是指在 HTTP 请求中除了请求行(request line)、请求头(headers)之外的实际数据部分。请求体通常包含用于向服务器发送数据的信息,这些信息可以是表单数据、JSON 对象、XML 文档或其他任何形式的数据。 http请求一般包含的内容 HTTP(超…...
助力语音技术发展,景联文科技提供语音数据采集服务
语音数据采集是语音识别技术、语音合成技术以及其他语音相关应用的重要基础。采集高质量的语音数据有助于提高语音识别的准确性,同时也能够促进语音技术的发展。 景联文科技作为专业的数据采集标注公司,支持语音数据采集。可通过手机、专业麦克风阵列、专…...
PyTorch搭建神经网络入门教程
PyTorch搭建神经网络入门教程 在机器学习和深度学习中,神经网络是最常用的模型之一,而 PyTorch 是一个强大的深度学习框架,适合快速开发与研究。在这篇文章中,我们将带你一步步搭建一个简单的神经网络,并介绍 PyTorch…...
你的电脑能不能安装windows 11,用这个软件检测下就知道了
为了应对Windows 11的推出,一款名为WhyNotWin11的创新型诊断软件应运而生。这个强大的工具不仅仅是一个简单的兼容性检测器,它更像是一位细心的数字医生,全方位评估您的计算机是否准备好迎接微软最新操作系统的挑战。 WhyNotWin11的功能远超…...
BF 算法
目录 BF算法 算法思路 完整代码 时间复杂度 查找所有起始位置 BF算法 BF算法:即暴力(Brute Force)算法,是一种模式匹配算法,将目标串 S 的第一个字符与模式串 T 的第一个字符进行匹配,若相等,则继续比较 S 的第二…...
SHOW-O——一款结合多模态理解和生成的单一Transformer
1.前言 大型语言模型 (LLM) 的重大进步激发了多模态大型语言模型 (MLLM) 的发展。早期的 MLLM 工作,例如 LLaVA、MiniGPT-4 和 InstructBLIP,展示了卓越的多模态理解能力。为了将 LLM 集成到多模态领域,这些研究探索了将预训练的模态特定编码…...
缓存框架JetCache源码解析-缓存变更通知机制
为什么需要缓存变更通知机制?如果我们使用的是本地缓存或者多级缓存(本地缓存远程缓存),当其中一个节点的本地缓存变更之后,为了保证缓存尽量的一致性,此时其他节点的本地缓存也需要去变更,这时…...
Android 设置特定Activity内容顶部显示在状态栏底部,也就是状态栏的下层 以及封装一个方法修改状态栏颜色
推荐:https://github.com/gyf-dev/ImmersionBar 在 Android 中要实现特定 Activity 内容顶部显示在状态栏底部以及封装方法修改状态栏颜色,可以通过以下步骤来完成: 一、让 Activity 内容显示在状态栏底部 在 AndroidManifest.xml 文件中,为特…...
用自己的数据集复现YOLOv5
yolov5已经出了很多版本了,这里我以目前最新的版本为例,先在官网下载源码:GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite 然后下载预训练模型,需要哪个就点击哪个模型就行&am…...
如何在博客中插入其他的博客链接(超简单)最新版
如何在博客中插入其他的博客链接 1.复制自己要添加的网址(组合键:Ctrlc)2. 点击超链接按钮3. 粘贴自己刚才复制的网址(组合键:Ctrlv)并点击确定即可4.让博客链接显示中文5.点击蓝字即可打开 1.复制自己要添…...
JS通过递归函数来剔除树结构特定节点
最近在处理权限类问题过程中,遇到多次需要过滤一下来列表的数据,针对不同用户看到的数据不同。记录一下 我的数据大致是这样的: class UserTree {constructor() {this.userTreeData [// 示例数据{ nodeid: "1", nodename: "R…...
javayufa
1.变量、运算符、表达式、输入输出 编写一个简单的Java程序–手速练习 public class Main { public static void main(String[] args) { System.out.println("Hello World"); } } 三、语法基础 变量 变量必须先定义,才可以使用。不能重名。 变量定义的方…...
软考-高级系统分析师知识点-补充篇
云计算 云计算的体系结构由5部分组成,分别为应用层,平台层,资源层,用户访问层和管理层,云计算的本质是通过网络提供服务,所以其体系结构以服务为核心。 系统的可靠性技术---容错技术---冗余技术 容错是指系…...
JavaScript全面指南(四)
🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript全面指南 目录 61、如何防止XSRF攻击 62、如何判断一个对象是否为数组&…...
2024年诺贝尔物理学奖的创新之举
对于2024年诺贝尔物理学奖的这一创新之举,我的观点可以从以下几点展开: 跨学科融合的里程碑:将诺贝尔物理学奖颁发给机器学习与神经网络领域的研究者,标志着科学界对跨学科合作和融合的认可达到新高度。这不仅体现了理论物理与计算…...
FileLink内外网文件交换——致力企业高效安全文件共享
随着数字化转型的推进,企业之间的文件交流需求日益增加。然而,传统的文件传输方式往往无法满足速度和安全性的双重要求。FileLink作为一款专注于跨网文件交换的工具,致力于为企业提供高效、安全的文件共享解决方案。 应用场景一:项…...
使用Python在Jupyter Notebook中显示Markdown文本
使用Python在Jupyter Notebook中显示Markdown文本 引言1. 导入必要的模块2. 定义一个函数来显示Markdown文本3. 使用print_md函数显示Markdown文本4. 总结 引言 作为一名Python初级程序员,你可能已经熟悉了Jupyter Notebook这个强大的工具。Jupyter Notebook不仅支…...
G1 GAN生成MNIST手写数字图像
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 G1 GAN生成MNIST手写数字图像 1. 生成对抗网络 (GAN) 简介 生成对抗网络 (GAN) 是一种通过“对抗性”学习生成数据的深度学习模型,通常用于生成…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
