簡體   English   中英

當我在 HackerRank 中提交我的代碼時,它在三個測試用例中失敗並顯示“由於超時而終止:(”。那么我該如何解決呢?

[英]When I submit my code in HackerRank, it failed in three test cases and showing that "Terminated due to timeout :(" .So how can I fix it?

這是問題

您將獲得一個電話簿,其中包含人們的姓名和他們的電話號碼。 之后,您將獲得某個人的姓名作為查詢。 對於每個查詢,打印該人的電話號碼。

輸入格式

第一行將有一個 integer 表示電話簿中的條目數。 每個條目由兩行組成:姓名和相應的電話號碼。

在這些之后,會有一些查詢。 每個查詢將包含一個人的姓名。 讀取查詢直到文件結束。

限制條件:一個人的姓名僅由小寫英文字母組成,可以采用“first-name last-name”格式或“first-name”格式。 每個電話號碼正好有 8 位數字,沒有任何前導零。

1<=n<=100000

1<=查詢<=100000

Output 格式

對於每種情況,如果此人在電話簿中沒有條目,則打印“未找到”。 否則,打印此人的姓名和電話號碼。 有關確切格式,請參見示例 output。

為了使問題更容易,我們在編輯器中提供了部分代碼。 您可以完成該代碼或完全自己編寫。

這是我的代碼

導入 java.util.*;

class解決方案{

public static void main(String []argh){
    
    Scanner in = new Scanner(System.in);
    int n=in.nextInt();
    in.nextLine();
    int []numbers =new int[n];
    String []names=new String[n];
    int real=0;
    for(int i=0;i<n;i++){
        String Tname=in.nextLine();
        int Tphone=in.nextInt();
        in.nextLine();
        numbers[i]=Tphone;
        names[i]=Tname;
        real++;
    }
    
    
    while(in.hasNext()){
        String s=in.nextLine();
        boolean isFound=false;
        int temp=0;
        for(int i=0;i<real;i++){
            if(names[i].equals(s)){
               isFound=true;
               temp=numbers[i];
               break;
            }
        }
        if(isFound){
            System.out.println(s+"="+temp);
        }
        else{
            System.out.println("Not found");
        }  
    }
    
}

}

編譯器消息是

超出時間限制 您的代碼未在時間限制內執行。 請優化您的代碼。 有關執行時間限制的更多信息,請參閱環境頁面

超時的原因是迭代每個名稱的整個數字列表引起的。 要解決您的問題,您應該查看類似java.util.HashMap的內容。

然后要了解為什么這會(可能)起作用,您應該查看編程中的時間復雜性。 提示一下,在列表中搜索單個項目所花費的時間與列表時間成正比,而在HashMap中搜索項目需要恆定時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM