손실이 0 또는 1인 플레이어 찾기

1886 단어 theabbieleetcodedsa
정수 배열matches이 주어집니다. 여기서 matches[i] = [winneri, loseri]는 경기에서 플레이어winneri가 플레이어loseri를 이겼음을 나타냅니다.

다음과 같은 크기answer의 목록2을 반환합니다.
  • answer[0]는 경기에서 진 적이 없는 모든 플레이어의 목록입니다.
  • answer[1]는 정확히 한 경기에서 패한 모든 플레이어의 목록입니다.

  • 두 목록의 값은 오름차순으로 반환되어야 합니다.

    메모:
  • 한 경기 이상 플레이한 플레이어만 고려해야 합니다.
  • 테스트 케이스는 두 일치 항목이 동일한 결과를 갖지 않도록 생성됩니다.

  • 예 1:

    입력: 일치 = [[1,3],[2,3],[3,6],[5,6],[5,7],[4,5],[4,8],[4, 9],[10,4],[10,9]]
    출력: [[1,2,10],[4,5,7,8]]
    설명:
    플레이어 1, 2, 10은 경기에서 진 적이 없습니다.
    플레이어 4, 5, 7, 8은 각각 한 경기에서 패했습니다.
    플레이어 3, 6, 9는 각각 두 경기에서 패했습니다.
    따라서 답[0] = [1,2,10]이고 답[1] = [4,5,7,8]입니다.

    예 2:

    입력: 일치 = [[2,3],[1,3],[5,4],[6,4]]
    출력: [[1,2,5,6],[]]
    설명:
    플레이어 1, 2, 5, 6은 한 경기도 패하지 않았습니다.
    플레이어 3과 4는 각각 두 경기에서 패했습니다.
    따라서 답[0] = [1,2,5,6]이고 답[1] = []입니다.

    제약:
  • 1 <= matches.length <= 105
  • matches[i].length == 2
  • 1 <= winneri, loseri <= 105
  • winneri != loseri
  • 모든matches[i]은 고유합니다.

  • 해결책:

    import bisect
    from collections import defaultdict
    
    class Solution:
        def findWinners(self, matches: List[List[int]]) -> List[List[int]]:
            played = defaultdict(int)
            won = defaultdict(int)
            for winner, loser in matches:
                won[winner] += 1
                played[winner] += 1
                played[loser] += 1
            answer = [[], []]
            for player in played:
                lost = played[player] - won[player]
                if lost == 0:
                    bisect.insort(answer[0], player)
                elif lost == 1:
                    bisect.insort(answer[1], player)
            return answer
    

    좋은 웹페이지 즐겨찾기