文章目录
上周的周赛,还是挺简单的
2148. 元素计数
只需要保证【最小】<x<【最大】就可以了
考虑到数据量
1 <= nums.length <= 100
,可以直接写成一行,否则需要存一下min和max
classSolution:defcountElements(self, nums: List[int])->int:returnsum(min(nums)< x <max(nums)for x in nums)
2149. 按符号重排数组
筛选+拼接,可以学习下chain和zip的用法
classSolution:defrearrangeArray(self, nums: List[int])-> List[int]:return[*chain(*zip((x for x in nums if x >0),(x for x in nums if x <0)))]
2150. 找出数组中的所有孤独数字
Counter直接就过了
classSolution:deffindLonely(self, nums: List[int])-> List[int]:
cnt = Counter(nums)return[i for i in cnt.keys()ifnot cnt[i+1]andnot cnt[i-1]and cnt[i]==1]
2151. 基于陈述统计最多好人数
二进制枚举,2行解法
classSolution:defmaximumGood(self, statements: List[List[int]])->int:
cnt=lambda i:0ifany((i >> j)&1and st <2and st !=(i >> k)&1for j, row inenumerate(statements)for k, st inenumerate(row))elsebin(i).count('1')returnmax(cnt(i)for i inrange(1,1<<len(statements)))
偶然看到的一个大神的真·一行解法👇,太神奇了,大家可以学习下
classSolution:maximumGood=lambda _, S:max(sum(C)for C in product(range(2), repeat=len(S))ifall(C[i]==0or2==S[i][j]or S[i][j]==C[j]for i,j in product(range(len(S)), repeat=2)))
总结
这次的周赛极限解法是【一行】+【一行】+【二行】+【一行】,五行搞定
在题目不难的情况下,优雅地AK将是每一个pythoner永恒的追求
版权归原作者 可可卷 所有, 如有侵权,请联系我们删除。