[プログラマー]完走できなかった選手


完走していない選手

問題の説明


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

せいげんじょうけん

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

    function solution(participant, completion) {
        let answer;
        participant.sort();
        completion.sort();
        for(var i = 0; i < participant.length; i++){
            if(participant[i] !== completion[i]){
                answer = participant[i];
                break;
            }
        }
        return answer;
    }

    他人の解答

    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';
    }

    P.S.


    最初にincludeメソッドを用いてコードを記述し,タイムアウトによりエラー処理される.😅 プロセスをどのように減らすかを考慮すると、sortメソッドを使用してソートし、他の要素を発見したときに値を取得することで問題を解決します.
    他の人の解答から,Mapオブジェクトを利用してkeyに参加選手名,valueに+1を加え,完走したリストにMapオブジェクトに選手名があればvalue-1を返し,値が0より大きい選手名を返す.