java - 为什么我在 hackerrank 上的代码会出现 "terminated due to timeout"错误?

标签 java timeout terminate

当我仅为某些特定的测试用例运行代码时,我得到了“由于超时错误而终止”。即使我的代码为其他测试用例编译成功。有人可以帮我吗?

链接- https://www.hackerrank.com/challenges/phone-book

问题陈述:

您将获得一本电话簿,其中包含人们的姓名和他们的电话号码。之后你会得到一些人的名字作为查询。对于每个查询,打印那个人的电话号码。

输入格式:

第一行将有一个整数,表示电话簿中的条目数。每个条目由两行组成:姓名和相应的电话号码。

在这些之后,还会有一些查询。每个查询都将包含一个人的名字。读取查询直到文件结束。

约束:

1<=n<=100000

1<=查询<=100000

人名仅由小写英文字母组成,其格式可能为“名姓”或“名”。每个电话号码都有 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");
   }
  }
 }
}

PS:这是我在论坛上的第一个问题。我是业余学习java的。抱歉,如果我违反了提问的许多规则中的任何一条 :(。请纠正我并帮助我以一种好的方式为这里的社区做出贡献 :)

最佳答案

您的逻辑存在问题,它是使用顺序结构的 ArrayList 实现的。 List 中的任何搜索都是连续的,对于大型测试用例,在您的姓名列表中查找会花费太多时间。

HashMap 更适合电话簿示例,因为它将数据保存在键、值对中,并且由于哈希,查找速度很快

这里是使用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);
     }
  }

希望这能解释。

关于java - 为什么我在 hackerrank 上的代码会出现 "terminated due to timeout"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37230853/

相关文章:

java - 使用 Java 8 IntStream 计算阶乘?

java - 如何使用Java向测试计划中的测试用例添加参数?

ruby-on-rails - 如何在可配置的超时时间内响应 Rails 请求

python - 如何在 python 中终止 qthread

类似 Java Delphi 的类引用

python - 在内存缓存中获取/放入数据时指定超时(django)

bash - 在没有不必要延迟的情况下使 bash 中的命令超时

c++ - 过滤关键/致命异常以与 AddVectoredExceptionHandler 一起使用

java - 如果 FX 线程在 Java 中终止,则终止线程的最有效方法

java - 将数据放入分布式 map 时,Hazelcast 很慢