[解決済み] hackerrankで私のコードに "terminated due to timeout "エラーが発生するのはなぜですか?
質問
特定のテストケースに限ってコードを実行すると、「タイムアウトエラーで終了しました」と表示されます。他のテストケースでは正常にコンパイルできたのに。どなたか、この件に関して助けていただけませんか?
リンク https://www.hackerrank.com/challenges/phone-book
問題提起:
人の名前と電話番号からなる電話帳が渡される。その後、ある人の名前がクエリとして渡される。各クエリに対して、その人物の電話番号を表示せよ。
入力フォーマット :
最初の行は、電話帳の登録件数を示す整数である。各エントリーは、名前とそれに対応する電話番号の2行で構成されています。
この後、いくつかの問合せがあります。各クエリには人名が含まれます。ファイルの終わりまでクエリーを読みます。
制約事項
1<=n<=100000
1<=Query<=100000
人名は小文字の英字のみからなり、「first-name last-name」または「first-name」の形式であることがあります。電話番号は、先頭のゼロを除いたちょうど8桁の数字で構成されています。
出力形式:
各ケースについて、電話帳にその人の項目がない場合は、"Not found"と表示します。そうでなければ、その人の名前と電話番号を表示する。正確な書式はサンプル出力を参照してください。
問題を簡単にするために、エディタにコードの一部を用意しました。そのコードを完成させるか、完全に自分で書くかのどちらかです。
私のコードは以下の通りです。
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");
}
}
}
}
PS:これは私のフォーラムでの最初の質問です。私はjavaを学んでいるアマチュアです。私は質問をするための多くのルールのいずれかに違反した場合は申し訳ありません:( . 私を修正し、私は良い方法でここにコミュニティに貢献するのに役立ちますしてください:)
どのように解決するのですか?
このロジックの問題は、このロジックが
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);
}
}
これで説明できるといいのですが。
関連
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】Android java.lang.IllegalStateException: Android java.lang.IllegalStateException: Could not execute method of the activity
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Androidのエラーです。デバイス*に*.apkをインストールできませんでした: タイムアウト
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】予期しない型エラー
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。