好像好难啊
class Solution:
def findWinners(self, matches: List[List[int]]) -> List[List[int]]:
n=len(matches)
#字典
record=dict()
for i in range(n):
record[matches[i][0]]=i
for j in range(n):
if matches[j][1] in record:
record.pop(matches[j][1])
if j==n-1:
ret1=list(record.keys())
#重置字典
record=dict()
flag=dict()
for i in range(n):
toset=matches[i][1]
if toset not in flag:
flag[toset] = 0
else:
flag[toset] += 1
if toset not in record and flag[toset]==0:
record[toset]=i
elif flag[toset]==1:
record.pop(toset)
if i==n-1:
ret2=list(record.keys())
ret1.sort()
ret2.sort()
return [ret1,ret2]
好高的复杂度可能
看看题解
用到Counter方法
sorted()和sort() 函数的不同点:
sort()原地排序
而sorted不能原地排序,需要赋值给新数组
class Solution:
def findWinners(self, matches: List[List[int]]) -> List[List[int]]:
#取出所有玩家,其中set能够保证集合元素的唯一性
players=set(x for m in matches for x in m)
#这里使用一个Counter方法,列表技术,字典返回
loss_count=Counter(loser for _,loser in matches)
#loss.items()应该取的是字典里的每一项
return [sorted(x for x in players if x not in loss_count),sorted(x for x, c in loss_count.items() if c==1)]