【算法】力扣第 277 场周赛(最短代码)

上周的周赛,还是挺简单的

2148. 元素计数

只需要保证【最小】<x<【最大】就可以了
考虑到数据量1 <= nums.length <= 100,可以直接写成一行,否则需要存一下min和max

class Solution:
    def countElements(self, nums: List[int]) -> int:
        return sum(min(nums) < x < max(nums) for x in nums)

2149. 按符号重排数组

筛选+拼接,可以学习下chain和zip的用法

class Solution:
    def rearrangeArray(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直接就过了

class Solution:
    def findLonely(self, nums: List[int]) -> List[int]:
        cnt = Counter(nums)
        return [i for i in cnt.keys() if not cnt[i+1] and not cnt[i-1] and cnt[i]==1]

2151. 基于陈述统计最多好人数

二进制枚举,2行解法

class Solution:
    def maximumGood(self, statements: List[List[int]]) -> int:
        cnt=lambda i:0 if any((i >> j) & 1 and st < 2 and st != (i >> k) & 1  for j, row in enumerate(statements) for k, st in enumerate(row)) else bin(i).count('1')
        return max(cnt(i) for i in range(1, 1 << len(statements)))

偶然看到的一个大神的真·一行解法👇,太神奇了,大家可以学习下

class Solution:maximumGood=lambda _, S: max(sum(C) for C in product(range(2), repeat=len(S)) if all(C[i]==0 or 2==S[i][j] or S[i][j]==C[j] for i,j in product(range(len(S)), repeat=2)))

总结

这次的周赛极限解法是【一行】+【一行】+【二行】+【一行】,五行搞定
在题目不难的情况下,优雅地AK将是每一个pythoner永恒的追求

  • 20
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可可卷

不要看到我~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值