給出一系列選手的比賽結果,list中每一組[a,b]表示該場比賽選手a贏了選手b,統計所有比賽(1 <= matches.length <= 10
5),輸出沒有輸過的選手ID list和只輸了一次的選手list,注意輸出的選手ID需要排序,用python的set和dict隨便寫了一下,速度和內存都很一般,第一種寫法用set記錄所有選手的ID,用dict記錄每一個輸過的選手的輸額度次數,在第二重循環統計只輸了一場的選手時,順便從選手列表remove掉出現在loser字典里的選手;第二種寫法多用一個set記錄輸過的選手id,用差集計算出沒有輸過的選手ID
1 #2225
2 #Runtime: 3559 ms
3 #Memory Usage: 76.9 MB
4
5 class Solution(object):
6 def findWinners(self, matches):
7 """
8 :type matches: List[List[int]]
9 :rtype: List[List[int]]
10 """
11 players = set()
12 losers_dct = {}
13 lost_once = []
14 for [a, b] in matches:
15 players.add(a)
16 players.add(b)
17 if b not in losers_dct:
18 losers_dct[b] = 1
19 else:
20 losers_dct[b] += 1
21 for i in losers_dct:
22 players.remove(i)
23 if losers_dct[i] == 1:
24 lost_once.append(i)
25 return [sorted(players), sorted(lost_once)]
1 #2225
2 #Runtime: 3981 ms
3 #Memory Usage: 74.2 MB
4
5 class Solution(object):
6 def findWinners(self, matches):
7 """
8 :type matches: List[List[int]]
9 :rtype: List[List[int]]
10 """
11 players = set()
12 losers = set()
13 losers_dct = {}
14 lost_once = []
15 for [a, b] in matches:
16 players.add(a)
17 players.add(b)
18 losers.add(b)
19 if b not in losers_dct:
20 losers_dct[b] = 1
21 else:
22 losers_dct[b] += 1
23 winners = list(players - losers)
24 for i in losers_dct:
25 if losers_dct[i] == 1:
26 lost_once.append(i)
27 return [sorted(winners), sorted(lost_once)]