【找出输掉零场或一场比赛的玩家】python

好像好难啊

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)]

 

 

 

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值