[プログラマー]ハッシュ完走していない選手🏃🏿‍♀️🏃🏿‍♀️/Java


📝 没有完走的选手


✔¥質問説明


多くのマラソン選手がマラソンに参加した.1人の選手を除いて、すべての選手がマラソンを完走した.
マラソンに出場する選手の名前と完走した選手の名前の並びが完成したら、完走していない選手の名前を返す解決関数を書いてください.

✔勘定科目の制限

  • 試合に出場した選手数は1名以上10万名以下であった.
  • 完了長さは参加者長1より小さい.
  • 参加者の名前は20文字を超えない.
  • の参加者には同名の人がいる可能性があります.
  • 勘定科目勘定科目I/Oの例


    participantcompletionreturn["leo", "kiki", "eden"]["eden", "kiki"]"leo"["marina", "josipa", "nikola", "vinko", "filipa"]["josipa", "filipa", "marina", "nikola"]"vinko"["mislav", "stanko", "mislav", "ana"]["stanko", "ana", "mislav"]"mislav"

    勘定科目勘定科目I/Oの例説明


    例1
    「leo」は参加者名簿に載っているが、フルコースを走る者名簿には載っていないため、フルコースを完走できなかった.
    例2
    「vinko」は参加者名簿に載っていたが、完走者名簿に載っていなかったため完走できなかった.
    例#3
    「誤導」は参加者リストに2人いたが、完走者リストには1人しかいなかったため、1人は完走しなかった.

    👩🏻‍💻 Sortを使用したプール

    class Solution { 
    	public String solution(String[] participant, String[] completion) {
    		Arrays.sort(participant); 
    		Arrays.sort(completion);
    		String answer = null;
    		
    		for (int i = 0; i < completion.length; i++) 
    			if(!participant[i].equals(completion[i])) 
    				answer =  participant[i]; 
    	} 
    	return answer;
    }
    同じ名前のユーザを持つ例3の参加者リストをソートすると、

    ソート後、参加者と完了値が異なる場合は、答えに保存します.
    砲口の長さは完成長さと同じなので、参加者が最後に保存した選手が完成していない選手であれば、答えが見つからない.そこで、最後にParticipant[index]に戻ります.

    👩🏻‍💻 Hashを用いて解く

    class Solution { 
    	public String solution(String[] participant, String[] completion) { 
    		String answer = ""; 
    		HashMap<String, Integer> players = new HashMap<>(); 
    		for(String player : participant) 
    			players.put(player, players.getOrDefault(player, 0) + 1); 
    		for(String player : completion) 
    			players.put(player, players.get(player) - 1); 
    		for(String key : players.keySet()){ 
    			if (players.get(key) != 0) {
    				answer = key; 
    				break; 
    			}
    		} 
    		return answer; 
    	} 
    }
    海市地図では、選手たちの名前をkeyに、+1をvalueに入れます.
    同じ名前のユーザーがいる可能性があるため、getOrDefault関数を使用します.

    📎getOrDefault(Object key, V DefaultValue)


    見つかったキーが存在する場合は、そのキーにマッピングされた値を返します.そうでない場合は、ポーリング値を返す関数を返します.
    パラメータ入力のキーがプレイヤーのキーと同じ値である場合は、Valueを入力します.そうでない場合は0をDefaultとして使用します.

    図に示すように、選手たちを海西地図に入れた後、完走した選手の名前を消した.最後に値が0じゃない選手の名前を答えに保存して終わりました!