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

2169. 得到 0 的操作数

模拟,二行解法

class Solution:
    def countOperations(self, num1: int, num2: int,cnt:int =1) -> int:
        while num1!=0 and num2!=0 and (cnt:=cnt+1):num1,num2=min(num1,num2),max(num1,num2)-min(num1,num2)    
        return cnt-1

2170. 使数组变成交替数组的最少操作数

哈希,最大次大分类讨论即可,三行解法

class Solution(object):
    def minimumOperations(self, nums):
        c1,c2,n = Counter(nums[::2]),Counter(nums[1::2]),len(nums)
        m1,m2 = c1.most_common(2),c2.most_common(2)
        return 0 if n==1 else (n-m1[0][1]-m2[0][1] if m1[0][0]!=m2[0][0] else min(n - m1[0][1] - (0 if len(m2)==1 else m2[1][1]), n - m2[0][1] - (0 if len(m1)==1 else m1[1][1])))

2771. 拿出最少数目的魔法豆

可可的二行解法

class Solution:
    def minimumRemoval(self, beans: List[int]) -> int:
        n,res,t,sorted_beans = len(beans),sum(beans),sum(beans),sorted(beans)
        return min(t-(n-i)*sorted_beans[i] for i in range(n))

灵茶山大佬的一行解法

class Solution:
    def minimumRemoval(self, beans: List[int]) -> int:
        return sum(beans) - max((len(beans) - i) * v for i, v in enumerate(sorted(beans)))

2172. 数组的最大与和

超神奇三行解法,六弦大佬原话:

想到二分图最大权匹配,然后就搜到一个模板

import numpy as np
from scipy.optimize import linear_sum_assignment
class Solution:
    def maximumANDSum(self, nums: List[int], ns: int) -> int:
        nums, slots, mx = nums + [0] * (2 * ns - len(nums)), [*range(1, ns + 1)] * 2, np.zeros((ns * 2, ns * 2))
        for (i, x), (j, sn) in product(enumerate(nums), enumerate(slots)): mx[i, j] = x & sn
        return int(mx[linear_sum_assignment(-mx)].sum())

总结

前三题白给+第四题罚坐
总计代码量:2+3+1+3,九行代码完成一次周赛!

  • 26
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

可可卷

不要看到我~~

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

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

打赏作者

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

抵扣说明:

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

余额充值