[英]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.