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

在Java中,即使在“电话号码查询代码”中使用HashMap,也会超过时间限制

齐才艺
2023-03-14

你会得到一本电话簿,里面有人们的名字和电话号码。之后,你会得到一些人的名字作为查询。对于每个查询,打印该人的电话号码。

输入格式

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

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

限制条件:一个人的姓名仅由小写英文字母组成,可能采用“名字姓氏”格式,也可能采用“名字”格式。每个电话号码正好有8个数字,没有任何前导零。

输出格式

对于每种情况,如果对方在电话簿中没有条目,请打印“未找到”。否则,请打印此人的姓名和电话号码。有关确切格式,请参见示例输出。

为了使问题更简单,我们在编辑器中提供了一部分代码。您可以完成这段代码,也可以完全自己编写。

样本输入

3
uncle sam
99912222
tom
11122222
harry
12299933
uncle sam
uncle tom
harry

样本输出

uncle sam=99912222
Not found
harry=12299933

因此,我使用HashMap尝试了以下代码:

import java.util.*;
public class Solution
{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        int q=sc.nextInt();
        sc.nextLine();
        HashMap<String,String> dic=new HashMap<>(q);
        for(int i=0;i<q;i++)
        {
            dic.put(sc.nextLine(),sc.nextLine());
        }
        
        while(sc.hasNext())
        {
           
            String s=sc.nextLine();
            int f=0;
            String ans="";
             for (Map.Entry<String, String> e : dic.entrySet())
            {
                if ((e.getKey()).equals(s))
                {
                    f=1;
                    ans=e.getKey()+"="+e.getValue();
                }    
            }
            if (f==1)
            System.out.println(ans);
            else
            System.out.println("Not found");
           
        }
    }
}

共有1个答案

袁奇文
2023-03-14

即使在使用哈希映射时,您仍然在迭代映射中的所有条目,这违反了使用哈希映射的目的。

使用包含密钥检查映射是否有密钥,并使用get获取值。这两个操作都是O(1)

....
String s = sc.nextLine();
if (dic.containsKey(s)) {
    System.out.println(s + "=" + s.get(s));
} else {
   System.out.println("Not found");
}
 类似资料:
  • 这是使用com.android.support:appcompat-v7:22.2.0 删除autoLink参数将不会发生冲突。 有办法解决吗?

  • 问题内容: 以下python脚本允许我使用正则表达式从给定文件中抓取电子邮件地址。 我该如何添加才能获得电话号码?说,是7位还是10位(带区号),还要加上括号吗? 我当前的脚本可以在下面找到: 正则表达式的电话号码: 电话号码的另一个正则表达式: 问题答案: 如果您对学习正则表达式感兴趣,可以尝试自己编写。它并没有想象中那么难。诸如RegexPal之类的网站允许您输入一些测试数据,然后针对该数据编

  • 我一直在使用谷歌libphonenumber来验证美国电话号码。现在我需要所有国家的国际支持。是否有可能反向查找使用libphonenumber的电话号码国家代码? 假设DB保存了英国号码448456779463。是否可以通过libphonenumber来检测该号码是否为UK?看来我只能检查号码的有效性,前提是我首先知道它的原产国。但是,如果你有数字却不知道它的来源国,该怎么办呢?

  • 我有一个中间件,它可以在不允许他访问路由的情况下限制对路由的访问。我把它添加到: 路线: 控制器功能:: 现在说真的:如果角色id为2,中间件应该返回404视图而不执行路由。但它打印执行字符串在屏幕上! 1.如果我删除或评论: 它返回 如果我把路线登记移到 “网络”= 和评论: 然后屏幕显示“中间件”,中间件工作 我的问题是,如果我使用它,为什么middlware允许函数执行 在第一个手柄功能?为

  • 我有一个以字符串形式存储在Excel中的电话号码,Excel文件创建成功,数据没有错误,但每个电话号码旁边都有一个“数字存储为文本”错误。 我从网上了解到,我应该使用excel中包含的特殊电话号码格式或自定义的000-000-0000格式。我可以使用excel程序设置这些,但不能从我的Java代码中设置。 我四处寻找关于setCellType和DataFormat的信息,但我假设CellType必

  • 问题内容: 一旦用户开始将电话号码键入此格式类型,并且我可以正常工作,我就在格式化文本文件中的文本,但是一旦我从服务器上获得了电话号码,我就这样得到了,所以请您告诉我如何编辑它我从服务器获得相同格式的文件吗? 输入开始后的代码: 问题答案: 用String中的字符进行操作不是很简单。您需要遵循以下条件: 斯威夫特2.1 雨燕2.0 代码将打印