浅谈 刷算法题时遇到运行超时异常 的解决办法

文章目录

  • 一、背景介绍
  • 二、解决办法
    • 2.1 C/C++ 语言
    • 2.2 Java 语言
      • 2.2.1 ACM模式下 Java的I/O原理
  • 三、模板详情

一、背景介绍

最近在牛客、leetcode 刷算法题时发现一个奇怪的问题,明明解题思路、所用算法与题解一致,并且在本地IDE运行是通过的,但是在牛客、leetcode 却没办法AC,出现一个叫做 运行超时 的异常。通过查阅资料、反复验证之后,找出了一个有效的解决办法。
在这里插入图片描述

二、解决办法

2.1 C/C++ 语言

针对使用 C/C++ 语言刷算法题遇到 运行超时异常 问题的同学,可以将输入/输出 换成 scanf/printf,此时极大概率就能通过

2.2 Java 语言

针对使用 Java 语言刷算法题时遇到 运行超时异常 问题的同学,就比较麻烦了,需要速记牢背一个 Java快速 IO 的模板,牢记这个模板之前我们需要先了解牛客、leetcode 在刷算法题时给我们提供的 ACM模式进行编程时(一般会给出两种模式进行编写代码,1、核心代码模式,即给出一个函数/方法,在此函数里书写题目的解决逻辑即可。2、ACM模式:给出Main类、main方法,其他没给出,需要书写解题时需用到的全部代码,包括引入的包名,都需要自己手动书写。一般工作时笔试中,做编程题时,给出的都是ACM模式),其进行I/O的流程。

2.2.1 ACM模式下 Java的I/O原理

对于 ACM模式 下,Java 进行 I/O的流程:
输入情况下(Java 使用 new Scanner(System.in) 进行输入数据):
在这里插入图片描述
输出情况下(Java 使用 System.out 进行输出数据):
在这里插入图片描述
从上述ACM模式下进行输入输出的原理图中,我们就能清楚知道使用 Java 自带的 Scanner / System.out 进行输入输出时,每次 输入/输出 都需要访问I/O设备,但访问一次I/O设备又是很慢的,因此代码量庞大的情况下,就会出现 运行超时异常问题。

Java 快速 I/O 模板:

import java.util.*;
import java.io.*;public class Main
{public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static void main(String[] args) throws IOException{// 写代码out.close();}
}class Read // 自定义快速读入
{StringTokenizer st = new StringTokenizer("");BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException {while(!st.hasMoreTokens()){st = new StringTokenizer(bf.readLine());}return st.nextToken();}String nextLine() throws IOException {return bf.readLine();}int nextInt() throws IOException {return Integer.parseInt(next());}long nextLong() throws IOException {return Long.parseLong(next());}double nextDouble() throws IOException {return Double.parseDouble(next());}float nextFloat() throws IOException{return Float.parseFloat(next());}
}

希望使用 Java 作为 主编程语言的同学能够牢记这个 快速读写模板,不仅仅是我们日常在 牛客、leetcode 上进行 刷题 会用到,真正在找工作,进入笔试阶段书写编程题时,我们更会用到。所以这个模板必须要熟记于心,并且能够在3分钟内默写出来是最好的。

三、模板详情

可能有同学不清楚这个模板中的代码原理,我在这里简单解释一下,方便大家弄清原理后,更快速的记住这个模板。

1、首先,输出时,我们在模板中使用 字符流BufferedWriter 代替 字节流System.out 进行输出数据。
在这里插入图片描述
我们将 原来的 输出字节流 System.out 使用 输出字符流 BufferedWriter 代替,这是因为 字符流 自带 内存缓冲区,此时就会将 存储在I/O设备文件中的数据移到字符流自带的内存缓冲区里,每次输出时就在这个字符缓冲区内放数据,当不再进行输出时,一次性将数据放到 I/O设备的文件上即可。由于访问内存比访问I/O设备要快得多,同时,最后只需要访问一次I/O设备,这大大加快了写入的速度,造成 运行超时异常的概率大大降低。同时再在 BufferedWriter 上封装一层 PrintWriter,是由于 PrintWriter类中的输出形式与原来的输出形式一致,都是 print/printf, 此时输出时就可以使用 print/println 进行输出,不至于突然使用陌生的输出而出现陌生/不适应/不顺手的情况。当然,最后是否封装 printWriter 这一层都行,看自己的使用习惯。

在这里插入图片描述

2、使用 字符流 BufferedReader 代替 字节流 System.in 进行 输入数据。

在这里插入图片描述
我们自定义了一个 Read 类,通过这个类,实现 原来输入时使用 Scanner.in 类中的所有nextxx()方法。在这个 Read 类中,首先定义了一个 StringTokenizer 类型的 st 对象,使用 StringTokenizer 类的构造方法,传入了一个 空字符串,因此此时的 st 对象 是一个空字符串。
在这里插入图片描述
然后又定义了一个 BufferedReader 类,使用 字符流 替代 字节流,这里的原理跟上面输出使用的 BufferedWriter 原理都是一样的,他们都自带内存缓冲区,那么此时使用 nextxx() 方法进行输入数据时,会直接从内存缓冲区中拿取数据,同样的,访问内存的速度远比于访问I/O的速度要快得多,此时发生 运行超时异常 的概率就会大大降低。
在这里插入图片描述

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

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

相关文章

【C语言__结构体__复习篇5】

目录 前言 一、结构体基础知识 1.1 结构体的语法形式 1.2 创建结构体变量 1.3 结构体变量的初始化 1.4 点(.)操作符和箭头(->)操作符 二、匿名结构体 三、结构体自引用 四、结构体内存对齐 4.1 内存对齐的规则 4.2 出现结构体内存对齐的原因 4.3 修改默认对齐数 五、结…

Flutter 热修复(Shorebird)

Shorebird:https://docs.shorebird.dev/ 我们都知道安卓原生开发,热修复已经不是什么难题。阿里云,腾讯云已经都有现成的SDK可以接入。 然而Flutter开发还一直没有类似热修复的开发库,无意中看到了Shorebird这个平台&#xff0c…

数据结构 -- 二叉树二叉搜索树

二叉树 二叉树是这么一种树状结构:每个节点最多有两个孩子,左孩子和右孩子 重要的二叉树结构 完全二叉树(complete binary tree)是一种二叉树结构,除最后一层以外,每一层都必须填满,填充时要遵…

C++ 协程 学习笔记

协程的优势就是比线程切换的时间少很多,协程的切换时间是纳秒,而进行切换的时间是微秒 单线程用协程可以轻松的处理并发任务 co_yield和co_await可以将协程暂停下来 resume又把协程激活 如果c函数里有co_await、co_return、co_yield就会自动判定为协程…

【实测】记一次用windows11家庭中文版部署django+vue项目的踩坑之旅

整个过程下来,给我的感觉就和吃了翔一样难受,窒息的感觉,全程没少骂win11的设计者... 因为要调试一些只有在windows才会出现的测试平台bug,于是我耗重金购入了一台顶配windows笔记本。以下是配置: 配置还蛮高的对吧&am…

链表经典算法OJ题目

1.单链表相关经典算OJ题目1:移除链表元素 思路一 直接在原链表里删除val元素,然后让val前一个结点和后一个节点连接起来。 这时我们就需要3个指针来遍历链表: pcur —— 判断节点的val值是否于给定删除的val值相等 prev ——保存pcur的前…

Spring Boot后端与Vue前端融合:构建高效旅游管理系统

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

【网络编程】TCP流套接字编程(TCP实现回显服务器)

一.TCP流套字节相关API. Socket(既能给客户端使用,也能给服务器使用) 构造方法 基本方法: ServerSocket(只能给服务器使用) 构造方法: 基本方法: 二.TCP实现回显服务器. 客户端代码示例: package Demo2;import java.io.IOException; import java.io.InputStream; import j…

一个char类型数字转字符串后引起的惨案

问题现象 嵌入式开发平台&#xff0c;交叉编译链比较老&#xff0c;还不支持 C11 的 to_string 写法&#xff0c;此时想通过模板方式&#xff0c;构造一个通用的 toString 接口&#xff0c;采用了 ostringstream &#xff0c;就出现了问题。 模板接口如下 template <type…

2 逻辑斯蒂回归(分类)

目录 1 理论 逻辑回归假设数据服从伯努利分布&#xff08;二分类&#xff09;,通过极大化似然函数的方法&#xff0c;运用梯度下降来求解参数&#xff0c;来达到将数据二分类的目的。 逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;是一种用于解决分类问题的…

esp32-通过wifi使用timelib库同步时间(三)

库的安装 本文基于platformIO&#xff0c;安装较为简单如下图 实例代码 完整代码如下&#xff0c;如果时间获取超时请使用time1.aliyun.com获取时间。 /** Time_NTP.pde* Example showing time sync to NTP time source** This sketch uses the Ethernet library*/#include …

Kafka入门介绍+集群部署+简单使用

Kafka入门介绍集群部署简单使用 简介核心概念Broker&#xff08;服务节点/实例&#xff09;Producer&#xff08;生产者&#xff09;Topic&#xff08;主题&#xff09;Partition&#xff08;分区&#xff09;Consumer&#xff08;消费者&#xff09;和Consumer Group&#xff…

对组合模式的理解

目录 一、场景1、题目描述 【[案例来源](https://kamacoder.com/problempage.php?pid1090)】2、输入描述3、输出描述4、输入示例5、输出示例 二、实现&#xff08;假的组合模式&#xff09;1、代码2、为什么上面的写法是假的组合模式&#xff1f; 三、实现&#xff08;真的组合…

文本生成任务的评价方法BLEU 和 ROUGE

BLEU 是 2002 年提出的&#xff0c;而 ROUGE 是 2003 年提出的。这两种指标虽然存在着一些问题&#xff0c;但是仍然是比较主流的评价指标。 BLUE BLEU 的全称是 Bilingual evaluation understudy&#xff0c;BLEU 的分数取值范围是 0&#xff5e;1&#xff0c;分数越接近1&a…

YOLOv9改进策略 | 细节创新篇 | 迭代注意力特征融合AFF机制创新RepNCSPELAN4

一、本文介绍 本文给大家带来的改进机制是AFF&#xff08;迭代注意力特征融合&#xff09;&#xff0c;其主要思想是通过改善特征融合过程来提高检测精度。传统的特征融合方法如加法或串联简单&#xff0c;未考虑到特定对象的融合适用性。iAFF通过引入多尺度通道注意力模块(我…

算法打卡day52|单调栈篇03| 84.柱状图中最大的矩形

算法题 Leetcode 84.柱状图中最大的矩形 题目链接:84.柱状图中最大的矩形 大佬视频讲解&#xff1a;84.柱状图中最大的矩形视频讲解 个人思路 这题和接雨水是相似的题目&#xff0c;原理上基本相同&#xff0c;也是可以用双指针和单调栈解决&#xff0c;只是有些细节不同。…

锦瑟香也MYLOVE:音质与颜值俱佳,入坑HiFi的热门好物!

当下尽管无线耳机大行其道&#xff0c;但有线耳机依旧保有其独特的魅力&#xff0c;特别是在音质表现上&#xff0c;它们拥有无线耳机难以企及的优势。如果对音质要求很高的话&#xff0c;口袋里还是少不了一副有线耳机。国产品牌中就有许多性价比高的有线耳机&#xff0c;它们…

Django admin后台添加自定义菜单和功能页面

django admin是根据注册的模型来动态生成菜单&#xff0c;从这个思路出发&#xff0c;如果想添加自定义菜单&#xff0c;那就创建一个空模型并且注册。步骤如下&#xff1a; 1、创建空模型&#xff1a; class ResetSVNAuthFileModel(models.Model):"""仅用来显…

《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制伊甸火山3D网格曲面图

11.4.2小节我们使用3D曲面图可视化分析伊甸火山数据&#xff0c;本小节我们采用3D网格曲面图可视化分析伊甸火山数据&#xff0c;以展示其地形&#xff0c;具体示例代码如下。 购书地址&#xff1a;https://item.jd.com/14102657.html

Django数据导出与导入问题

执行: python manage.py loaddata data.json 的常见错误: * 1. UnicodeDecodeError: utf-8 codec cant decode byte 0xff in position 0: invalid start byte* 2. raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",...django.core.serializer…