java - 谁能解释我如何克服 Java 中的 TLE 错误。我在 3 个输入中超过了时间限制,这些输入将 100000 个测试用例作为输入
问题描述
谁能解释我如何克服 Java 中的 TLE 错误。
因此,我实现了一个座位安排代码,其中第一行输入为测试用例,第二行输入为座位号。在输出中,我必须显示我的输入和座位类型 WS、AS 或 MS 的面对座位号。
例如:
2 // test cases
18 // seat number
40 // seat number
19 WS // Output
45 AS // Output
这是我实现的代码:
import java.io.*;
class Solution9
{
public static void main(String arg[])throws Exception
{
int tc;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
tc=Integer.parseInt(br.readLine());
int sno,q,r;
String type,s="";
for(int i=0;i<tc;i++)
{
sno=Integer.parseInt(br.readLine());
sno--;
q=sno/12;
r=sno%12;
int csno;
csno=11-r;
csno+=q*12;
r%=6;
if(r==0 || r==5)
type="WS";
else if(r==1 || r==4)
type="MS";
else
type="AS";
s=s+ (csno+1) + " " + type + "\n" ;
}
System.out.println(s);
}
}
解决方案
如果您在分析器工具的控制下运行程序,您很可能会注意到大量时间花在StringBuilder
您的生产线周围的活动中
s=s+ (csno+1) + " " + type + "\n" ;
反复向 a 添加一些东西String
是低效的,因为它每次都执行以下操作:
- 将现有字符串复制
s
到 aStringBuilder
中(所花费的时间与字符串不断增加的长度成正比), - 将其他组件附加到
StringBuilder
, String
从内容创建一个新的StringBuilder
(再次花费与内容不断增加的长度成正比的时间)。
由于您对中间字符串并不真正感兴趣,而只对最终结果感兴趣,因此请替换
String s="";
和
StringBuilder s=new StringBuilder();
和
s=s+ (csno+1) + " " + type + "\n" ;
和
s.append(csno+1).append(" ").append(type).append("\n");
这应该会大大提高性能。
由于String
Java 中的 s 是不可变的,因此“更改”任何有关String
以某种方式创建新的String
(并且可能忘记旧的)的手段。所以在StringBuilder
你准备好最终结果之前最好使用 a ,因为StringBuilder
s 允许在不重复创建新内容的情况下更改它们的内容。
推荐阅读
- javascript - HTML 和 JS 的输入和输出
- android - 如何保存在内部存储中录制的音频
- model-view-controller - 如何在web api中使用join并显示两个表数据
- javascript - 带有 Javascript 的 Youtube 数据 API:直接上传视频
- android - 带有 MaterialDrawer 的汉堡包图标
- php - PHP/SQL 脚本意外停止,在调试中工作
- ruby-on-rails - 使用“find_by”和类似方法时,我的 Ruby on Rails 应用程序如何连接到数据库?
- sql - 正则表达式负前瞻不排除所需的字符串
- ios - 在图像上添加文本,例如在 WhatsApp 和 facebook 中创建状态
- scala - 如何修复 Scala (2.11) 中路径相关类型的类型不匹配错误?