完走していない選手


一日に一つの問題を解く
多くのマラソン選手がマラソンに参加した.1人の選手を除いて、すべての選手がマラソンを完走した.
マラソンに出場する選手の名前と完走した選手の名前の並びが完成したら、完走していない選手の名前を返す解決関数を書いてください.
せいげんじょうけん
マラソンに出場する選手は1人以上10万人以下だ.
完了長さは参加者の長さ1より小さい.
参加者の名前には、少なくとも1つまたは20個の小文字が含まれています.
参加者は同名であってもよい.
初挑戦
public static String solution(String[] participant, String[] completion) {
        Map<Integer, String> participantMap = new ConcurrentHashMap<>();
        List<String> completionList = new CopyOnWriteArrayList<>(Arrays.asList(completion));

        for (String p : participant) {
            participantMap.put(participantMap.size(), p);
        }

        for (int key : participantMap.keySet()) {
            String value = participantMap.get(key);

            for (String c : completionList) {
                if (value.equals(c)) {
                    participantMap.remove(key, value);
                    completionList.remove(c);
                    break;
                }
            }
        }

        for (String t : participantMap.values()) {
            return t;
        }

        return null;
    }

だめだと思ったら、結果値を出してから回します.
二度目の挑戦
public String solution(String[] participant, String[] completion) {
       List<String> participantList = new CopyOnWriteArrayList<>(Arrays.asList(participant));
       List<String> completionList = new CopyOnWriteArrayList<>(Arrays.asList(completion));

        int x = 0;

        for (String p : participantList) {
            int y = 0;

            for (String c : completionList) {
                if (p.equals(c)) {
                    participantList.remove(x--);
                    completionList.remove(y);
                    break;
                }

                y++;
            }

            x++;
        }

        return participantList.get(0);
    }

効率テストに失敗しました
3度目の挑戦
    public static String solution(String[] participant, String[] completion) {
        List<String> participantList = new CopyOnWriteArrayList<>(Arrays.asList(participant));
        List<String> completionList = new CopyOnWriteArrayList<>(Arrays.asList(completion));

        int x = 0;

        for (String p : participantList) {
            if (completionList.contains(p)) {
                participantList.remove(x--);
                completionList.remove(p);
            }

            x++;
        }

        return participantList.get(0);
    }

失敗
4度目の挑戦
    public static String solution(String[] participant, String[] completion) {
        Map<String, Integer> participantMap = new HashMap<>();

        for (String p : participant) {

            if (participantMap.containsKey(p)) {
                participantMap.put(p, participantMap.get(p) + 1);
            } else {
                participantMap.put(p, 1);
            }
        }

        for (String c : completion) {
            participantMap.put(c, participantMap.get(c) - 1);
        }

        for (String key : participantMap.keySet()) {
            int v = participantMap.get(key);

            if (v != 0) {
                return key;
            }
        }

        return null;
    }

国境を越える