給出一系列選手的比賽結(jié)果,list中每一組[a,b]表示該場比賽選手a贏了選手b,統(tǒng)計(jì)所有比賽(1 <= matches.length <= 10
5),輸出沒有輸過的選手ID list和只輸了一次的選手list,注意輸出的選手ID需要排序,用python的set和dict隨便寫了一下,速度和內(nèi)存都很一般,第一種寫法用set記錄所有選手的ID,用dict記錄每一個(gè)輸過的選手的輸額度次數(shù),在第二重循環(huán)統(tǒng)計(jì)只輸了一場的選手時(shí),順便從選手列表remove掉出現(xiàn)在loser字典里的選手;第二種寫法多用一個(gè)set記錄輸過的選手id,用差集計(jì)算出沒有輸過的選手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)]