当我只为一些特定的测试用例运行代码时,我得到了一个“由于超时错误而终止”。即使我的代码为其他测试用例成功编译。有人能帮我吗?
链接-https://www.hackerrank.com/challenges/phone-book
问题陈述:
你会得到一本电话簿,里面有人们的名字和电话号码。之后,你会得到一些人的名字作为查询。对于每个查询,打印该人的电话号码。
输入格式:
第一行有一个整数,表示通讯录中的条目数。每个条目由两行组成:姓名和相应的电话号码。
在这些之后,将会有一些查询。每个查询将包含一个人的姓名。读取查询直到文件结束。
限制条件:
1.
1.
一个人的名字只由小写英文字母组成,可以是“名字姓氏”或“名字”。每个电话号码都有8位数,没有前导零。
输出格式:
对于每种情况,如果该人在电话簿中没有条目,请打印“未找到”。否则,打印此人的姓名和电话号码。有关确切格式,请参阅示例输出。
为了简化问题,我们在编辑器中提供了部分代码。您可以完成该代码,也可以完全自己编写。
我的代码如下:
import java.util.*;
import java.io.*;
class Solution
{
public static void main(String []args)
{
Scanner in = new Scanner(System.in);
int n=in.nextInt();
in.nextLine();
ArrayList<String> name = new ArrayList<String>();
int[] phone = new int[100000];
for(int i=0;i<n;i++)
{
name.add(in.nextLine());
phone[i]=in.nextInt();
in.nextLine();
}
while(in.hasNext())
{
String s=in.nextLine();
int a=name.indexOf(s);
if(a>=0)
{
System.out.println(s + "=" + phone[a] );
}
else
{
System.out.println("Not found");
}
}
}
}
这是我在论坛上的第一个问题。我是学习java的业余爱好者。对不起,如果我违反了许多提问规则中的任何一条:(.请纠正我,帮助我以一种良好的方式为社区做出贡献:)
通常,当您的代码执行时间超过问题设置程序(Hackerrank)设置的最大时间时,会发生因超时错误而终止。
您尝试的问题旨在教您如何使用HashMaps,但您使用数组解决了这个问题。在数组中搜索需要O(n)长的时间比通常散列搜索O(1)时间的地图。对于较小的输入,您的程序工作正常,但对于较大的输入,如100000个条目,它将需要更长的时间,并导致超时。因此,使用映射而不是数组和数组列表
逻辑的问题在于,它是使用顺序结构ArrayList
实现的。列表中的任何搜索都是连续的,对于大型测试用例,在名称列表中查找会花费太多时间。
哈希映射更适合于电话簿示例,因为它将数据保存在密钥中,值对和查找由于哈希而快速
下面是一个使用HashMap实现的版本
Map<String,Integer> phonebook = new HashMap<>();
Scanner in = new Scanner(System.in);
int n=in.nextInt();
in.nextLine();
for(int i=0;i<n;i++)
{
String name=in.nextLine();
int phone=in.nextInt();
in.nextLine();
phonebook.put(name,phone);
}
while(in.hasNext())
{
String s=in.nextLine();
Integer phone = phonebook.get(s);
if(phone==null){
System.out.println("Not found");
} else {
System.out.println(s+"="+phone);
}
}
希望这能解释。
关于这个话题有很多讨论。我看了一遍,但没有一个有用。 问题似乎相当简单: 如果我们列出10以下的所有自然数,它们是3或5的倍数,我们得到3、5、6和9。这些倍数之和是23。 求N以下3或5的所有倍数之和。 输入格式第一行包含表示测试用例数量的T。接下来是T行,每一行包含一个整数N。 输出格式对于每个测试用例,打印一个整数,表示N以下3或5的所有倍数之和。 约束1≤T≤10^5 1≤N≤10^9 然
问题-小鲍比喜欢巧克力。他经常去他最喜欢的商店——佩妮阿姨——买巧克力。他们在佩妮阿姨有促销活动。如果鲍比存了足够的包装纸,他可以把它们上交免费巧克力。 例如,鲍比必须花每根巧克力棒的钱。他可以上交包装纸来收到另一根巧克力棒。最初,他买巧克力棒,吃完后有包装纸。他上交了它们,留给他更多的巧克力棒。吃完这两根,他有包装纸,然后留下包装纸和他的新酒吧。一旦他吃了那根,他就有包装纸,然后把它们上交另一根
问题是-合并两个排序的链表。有关详细信息,请访问https://www.hackerrank.com/challenges/merge-two-sorted-linked-lists当我在网站上提交此内容时,它显示“因超时而终止”。请告诉我代码有什么问题,以及如何修复它。 }
我试图解决hackerrank的一个问题,当我提交我的解决方案时,我得到一个错误,说明“由于超时而终止”。 请检查代码,并建议我如何优化。 语句:您有一个空序列,将向您提供查询。每个查询都是以下三种类型之一: 1 x-将元素x推入堆栈。2-删除堆栈顶部的元素。3-打印堆栈中的最大元素。 输入格式 输入的第一行包含一个整数。接下来的每一行都包含上述查询。(保证每个查询都是有效的。) 输出格式 对于每
我在google cloud中创建了一个google cloud函数,它将连接到我在google cloud中创建的postgresql实例。 我正在使用'pg'节点模块。 我已经为此创建了一个私有IP。 我收到以下错误: 错误:由于在timeout.ConnectionTimeouthAndle.SetTimeout(/workspace/node_modules/pg/lib/client.j
我正在尝试解决一个来自HackerRank的问题,当我提交我的解决方案时,我得到一个错误,说明“由于超时而终止”。 问题:对n个大小的数组的左旋转操作将数组的每个元素向左移动1个单位。例如,如果对数组[1,2,3,4,5]执行两次左旋转,那么该数组将变为[3,4,5,1,2]。 给定一个由n个整数和一个数字d组成的数组,对该数组执行d个左旋转。然后将更新后的数组打印为单行以空格分隔的整数。 输入格