当前位置: 首页 > 知识库问答 >
问题:

为什么我在hackerrank的代码会出现“由于超时而终止”错误?

戚学
2023-03-14

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

链接-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的业余爱好者。对不起,如果我违反了许多提问规则中的任何一条:(.请纠正我,帮助我以一种良好的方式为社区做出贡献:)

共有2个答案

邢飞鸿
2023-03-14

通常,当您的代码执行时间超过问题设置程序(Hackerrank)设置的最大时间时,会发生因超时错误而终止。

您尝试的问题旨在教您如何使用HashMaps,但您使用数组解决了这个问题。在数组中搜索需要O(n)长的时间比通常散列搜索O(1)时间的地图。对于较小的输入,您的程序工作正常,但对于较大的输入,如100000个条目,它将需要更长的时间,并导致超时。因此,使用映射而不是数组和数组列表

张啸
2023-03-14

逻辑的问题在于,它是使用顺序结构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个左旋转。然后将更新后的数组打印为单行以空格分隔的整数。 输入格