完走していない選手


問題の説明


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

せいげんじょうけん

  • マラソンに出場する選手は1人以上10万人以下.
  • 完了長さは参加者長1より小さい.
  • 参加者の名前は20文字を超えない.
  • の参加者には同名の人がいる可能性があります.
  • I/O例

    participant											completion									return
    ["leo", "kiki", "eden"]								["eden", "kiki"]							"leo"
    ["marina", "josipa", "nikola", "vinko", "filipa"]	["josipa", "filipa", "marina", "nikola"]	"vinko"
    ["mislav", "stanko", "mislav", "ana"]				["stanko", "ana", "mislav"]					"mislav"

    私のコメント(JAVA)

  • の効率テストにも合格します.
  • 名の参加者と完走者を並べ替えた後、完走者が並んだ同じインデックスの中で、名前の異なる参加者、あるいは完走した最後の参加者.
  • import java.util.Arrays;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        for (int i=0; i<participant.length; i++) {
            if (i+1 == participant.length || !participant[i].equals(completion[i])) {
                answer = participant[i];
                break;
            }
        }
        
        return answer;
    }

    他の人の解答(JAVA)

    import java.util.HashMap;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
            String answer = "";
            HashMap<String, Integer> hm = new HashMap<>();
            
            // HashMap에 참가자 이름을 키값으로 명 수를 추가
            for (String player : participant) hm.put(player, hm.getOrDefault(player, 0)+1);
            // HashMap에서 완주자 이름을 찾아 명 수를 뺀다.
            for (String player : completion) hm.put(player, hm.get(player)-1);
            
            // HashMap에서 값이 0이 아닌 키값이 완주하지 못한 선수이다.
            for (String key : hm.keySet()) {
                if (hm.get(key) != 0) {
                    answer = key;
                }
            }
            
            return answer;
        }
    }
  • getOrDefault(Object key, V DefaultValue)
  • キー:値を入力する要素が必要なキー
  • defaultValue:デフォルト値
  • 、指定したキーにマップされていない場合は、戻る必要があります
  • 戻り値:見つかったキーが存在する場合は、そのキーにマッピングされた値を返します.そうでない場合はdefaultValueを返します.
  • を返します.

    私の解答(JavaScript)

    function solution(participant, completion) {
      let answer = '';
      
      participant.sort();
      completion.sort();
      
      for (let i=0; i<participant.length; i++) {
        // 배열의 해당 인덱스가 없을 경우 undefind를 반환한다.
        if (participant[i] !== completion[i]) {
          answer = participant[i];
          break;
        }
      }
      
      return answer;
    }

    他の人の解答(JavaScript)

    function solution(participant, completion) {
      const map = new Map();
      
      for (let i=0; i<participant.length; i++) {
        let a = participant[i],
            b = completion[i];
        
        map.set(a, (map.get(a) || 0) + 1);
        map.set(b, (map.get(b) || 0) - 1);
      }
      
      for (let [k, v] of map) {
        if (v > 0) return k;
      }
      
      return 'nothing';
    }