算法: 模拟题目练习

文章目录

  • 模拟
    • 替换所有的问号
    • 提莫攻击
    • 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;}

总结

  • 做模拟题时, 题目说啥咱干啥~
  • 有难度的模拟题需要我们找规律.
  • 画图是个好东西.

本文到这里就结束啦~

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python和Proxy302代理IP高效采集Bing图片

目录 项目背景一、项目准备环境配置 二、爬虫设计与实现爬虫设计思路目标网站分析数据获取流程 代码实现1. 初始化爬虫类&#xff08;BingImageSpider&#xff09;2. 创建存储文件夹3. 获取图像链接4. 下载图片5. 使用Proxy302代理IP6. 主运行函数 运行截图 三、总结 项目背景 …

SpringMVC一个拦截器和文件上传下载的完整程序代码示例以及IDEA2024部署报错 找不到此 Web 模块的 out\artifacts\..问题

一、SpringMVC一个拦截器和文件上传下载的完整程序代码示例 本文章是一个 SpringMVC拦 截器和文件上传下载的完整程序代码示例&#xff0c;使用的开发工具是 IntelliJ IDEA 2024.1.6 (Ultimate Edition)&#xff0c; 开发环境是 OpenJDK-21 java version 21.0.2。Tomcatt版本为…

【C++篇】类与对象的秘密(上)

目录 引言 一、类的定义 1.1类定义的基本格式 1.2 成员命名规范 1.3 class与struct的区别 1.4 访问限定符 1.5 类的作用域 二、实例化 2.1 类的实例化 2.2 对象的大小与内存对齐 三、this 指针 3.1 this指针的基本用法 3.2 为什么需要this指针&#xff1f; 3.3 t…

基于SSM+微信小程序的房屋租赁管理系统(房屋2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的房屋租赁管理系统实现了有管理员、中介和用户。 1、管理员功能有&#xff0c;个人中心&#xff0c;用户管理&#xff0c;中介管理&#xff0c;房屋信息管理&#xff…

Java基础-IO基础

IO是指input/output&#xff0c;即输入和输出。输入和输出是以内存为中心的&#xff1a; input 从外部往内存输入数据&#xff0c;比如硬盘中的数据写入内存等。 output 从内存往外输出数据&#xff0c;比如内存数据写入硬盘等。 File File类表示一个文件或者一个目录。使用F…

【服务器虚拟化是什么?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

父子元素中只有子元素设置margin-bottom的问题

问题代码如下所示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.div1 {background-color: red;width: 80px;height: 80px;border: 1px solid orange;}.div2 {bac…

【飞腾加固服务器】全国产化解决方案:飞腾FT2000+/64核,赋能关键任务保驾护航

在信息安全和自主可控的时代背景下&#xff0c;国产化设备的需求与日俱增&#xff0c;尤其是在国防、航空航天、能源和其他关键行业。高可靠性和极端环境设计的国产加固服务器&#xff0c;搭载强大的飞腾FT2000/64核处理器&#xff0c;全面满足国产自主可控的严苛要求。 性能强…

光伏电站设计之辐照度效果(threejs实现)

类似 solaredge里面的日照度效果 1、由经纬度和屋顶朝向获取&#xff08;参考pvlib&#xff09;当前地区的辐照度值&#xff0c; 2、根据辐照度值插值获取对应辐照度的颜色。 3、计算片段着色器里面计算每个顶点的遮挡率和紫色混合 4、计算鼠标移动中的投射屋顶位置辐照度&…

Ansible自动化运维管理工具

一、Ansible 1.1、自动化运维管理工具有哪些&#xff1f; 工具架构语言使用情况Ansible无clientpython 协议用ssh95%puppetC/Sruby 协议用http基本不用chefC/Sruby 协议用http基本不用saltstackC/Spython 协议用ssh5% 1.2、Ansible简介 Ansible是一个基于Py…

网易翻译工具解析!这几大翻译器值得一试!

翻译工具的出现&#xff0c;使得跨语言沟通变得更加便捷。本文将为您推荐几款优秀的翻译工具&#xff0c;包括福昕在线翻译、福昕翻译客户端、海鲸AI翻译和网易有道翻译&#xff0c;帮助您在学习、工作和生活中轻松应对语言挑战。 福昕在线翻译 直达链接&#xff08;复制到浏…

c4d渲染和3d渲染有什么区别?c4d和3dmax哪个容易学?

在现代设计和创意产业中&#xff0c;3D渲染技术是不可或缺的一部分。它能够帮助设计师和艺术家将他们的创意转化为逼真的视觉效果&#xff0c;从而更好地展示和传达他们的想法。在众多3D渲染软件中&#xff0c;C4D渲染和3D Max是两款备受关注的软件。 本文将探讨C4D渲染和3D渲…

深度学习领域,你心目中 idea 最惊艳的论文是哪篇?

深度学习发展至今&#xff0c;共经历了三次浪潮&#xff0c;20 世纪40年代到60年代深度学习的雏形出现在控制论(cybernetics)中&#xff0c;20 世纪 80 年代 到 90 年代深度学习表现为 联结主义(connectionism)&#xff0c;直到 2006 年&#xff0c;才真正以深度学习之名复兴。…

Android中的内容提供者

目录 1.创建内容提供者 1--手动创建一个Android应用程序 2--创建自定义的内容提供者 2.访问其他应用程序 1. 解析URI 2. 查询数据 3. 遍历查询结果 3)案例:读取手机通信录 1.声明权限 2.activity_main.xml文件内容 3.my_phone_list.xml文件内容 4.定义PhoneInfo实体 5.定义MyPh…

现代大数据架构Kappa

现代大数据架构中的Kappa架构是一种处理大数据的架构&#xff0c;它作为Lambda架构的替代方案出现&#xff0c;旨在简化数据处理流程。以下是对Kappa架构的详细介绍&#xff1a; 一、核心思想 Kappa架构的核心思想是简化数据处理流程&#xff0c;通过使用单一的流处理层来同时…

就是这个样的粗爆,手搓一个计算器:热量计算器

作为程序员&#xff0c;没有合适的工具&#xff0c;就得手搓一个&#xff0c;PC端&#xff0c;移动端均可适用。废话不多说&#xff0c;直接上代码。 HTML: <div class"calculator"> <label for"weight">体重 (kg):</label> <inpu…

Git之代已修改文件的目录高亮设置

不管Android Studio或者Idea&#xff0c;进入Setting 选择如图所示&#xff0c;并进行勾选 就可以高亮了。

【C++】类的默认成员函数:深入剖析与应用(上)

&#x1f600;在上一篇文章中我们初步了解了C的基础概念&#xff0c;现在我们进行对C类的默认成员函数进行更加深入的理解&#xff01; &#x1f449;【C新手入门指南&#xff1a;从基础概念到实践之路】 目录 &#x1f4af;前言 &#x1f4af;构造函数 一、构造函数的定义…

Ambari-2.7.4和HDP-3.1.4安装(附Ambari和HDP安装包)

1.、环境及软件准备 Ambari-2.7.4和HDP-3.1.4下载 ,提取码:3rwq 环境:CentOS7(我这里使用的是CentOS7.9版本)、三台虚拟机,单节点内存13GB、存储80GB 软件:mysql5.7+、jdk8、ambari-2.7.4.0-centos7.tar.gz、HDP-3.1.4.0-centos7-rpm.tar.gz、HDP-UTILS-1.1.0.22-centos7…

Nodejs使用http模块创建Web服务器接收解析RFID读卡器刷卡数据

本示例使用设备&#xff1a; https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1buHvw58&ftt&id22173428704 Javascript源码 //引用http模块创建web服务器&#xff0c;监听指定的端口获取以GET、POST、JSON等方式上传的数据&#xff0c;并回应驱动读卡…