← All problems

2225. Find Players with Zero or One Losses

MediumOpen on LeetCodeProblem statement

Problem Statement

2225. Find Players With Zero or One Losses

Medium


You are given an integer array matches where matches[i] = [winneri, loseri] indicates that the player winneri defeated player loseri in a match.

Return a list answer of size 2 where:

The values in the two lists should be returned in increasing order.

Note:

 

Example 1:

Input: matches = [[1,3],[2,3],[3,6],[5,6],[5,7],[4,5],[4,8],[4,9],[10,4],[10,9]]
Output: [[1,2,10],[4,5,7,8]]
Explanation:
Players 1, 2, and 10 have not lost any matches.
Players 4, 5, 7, and 8 each have lost one match.
Players 3, 6, and 9 each have lost two matches.
Thus, answer[0] = [1,2,10] and answer[1] = [4,5,7,8].

Example 2:

Input: matches = [[2,3],[1,3],[5,4],[6,4]]
Output: [[1,2,5,6],[]]
Explanation:
Players 1, 2, 5, and 6 have not lost any matches.
Players 3 and 4 each have lost two matches.
Thus, answer[0] = [1,2,5,6] and answer[1] = [].

 

Constraints:

C++

Source file
class Solution {
public:
    vector<vector<int>> findWinners(vector<vector<int>>& matches) {
        vector<vector<int>> ans(2, vector<int>({}));
        unordered_map <int, pair<int, int>> m;
        for (vector<int> v: matches)
            m[v[0]].first++, m[v[1]].second++;
        for (auto [K,P]:m){
            if(P.first+P.second==0)     // no matches played
                continue;
            else if (P.second==1)
                ans[1].push_back(K);
            else if (P.second==0)
                ans[0].push_back(K);
        }
        sort(begin(ans[0]), end(ans[0]));
        sort(begin(ans[1]), end(ans[1]));
        return ans;
    }
};