Java 为什么我会得到一个“;“因超时而终止”;我在hackerrank的代码出错?

Java 为什么我会得到一个“;“因超时而终止”;我在hackerrank的代码出错?,java,timeout,terminate,Java,Timeout,Terminate,当我只为一些特定的测试用例运行代码时,我得到了一个“由于超时错误而终止”。即使我的代码为其他测试用例成功编译。有人能帮我吗 链接- 问题陈述: 您将收到一本电话簿,其中包括人们的姓名和电话号码。在此之后,您将获得某个人的姓名作为查询。对于每个查询,打印此人的电话号码 输入格式: 第一行有一个整数,表示通讯录中的条目数。每个条目由两行组成:姓名和相应的电话号码 在这些之后,将会有一些查询。每个查询将包含一个人的姓名。读取查询直到文件结束 约束条件: import java.util.*; impo

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

链接-

问题陈述:

您将收到一本电话簿,其中包括人们的姓名和电话号码。在此之后,您将获得某个人的姓名作为查询。对于每个查询,打印此人的电话号码

输入格式

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

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

约束条件:

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");
   }
  }
 }
}

1逻辑的问题在于,它是使用顺序结构的
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);
     }
  }
Map phonebook=newhashmap();
扫描仪输入=新扫描仪(系统输入);
int n=in.nextInt();
in.nextLine();
for(int i=0;i通常在代码执行时间超过问题设置者(Hackerrank)设置的最大时间时发生“由于超时错误而终止”


您尝试的问题旨在教您如何使用哈希映射,但您使用数组解决了此问题。在数组中搜索要比通常在O(1)中进行哈希搜索的映射花费O(n)更长的时间时间。对于较小的输入,您的程序工作正常,但对于较大的输入,如100000条输入,则需要较长的时间并导致超时。因此,请使用映射而不是数组和ArrayList

为什么选择ArrayList而不是HashMap来表示您的电话簿?感谢您的建议。我不知道HashMap类。了解再次感谢:)谢谢你富有洞察力的建议。我是在你的反馈之后得到的,因为我了解了Hashmaps。谢谢:)