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

6008. 统计包含给定前缀的字符串

API题,一行

class Solution:
    def prefixCount(self, words: List[str], pref: str) -> int:
        return sum(w.startswith(pref) for w in words)

6009. 使两字符串互为字母异位词的最少步骤数

①哈希,二行

class Solution:
    def minSteps(self, s: str, t: str) -> int:
        cnt1,cnt2=Counter(s),Counter(t)
        return sum(abs(cnt1[x]-cnt2[x]) for x in set(s+t))

②并集减去交集,二行

class Solution:
    def minSteps(self, s: str, t: str) -> int:
        cs,ct = Counter(s),Counter(t)
        return sum(((cs | ct) - (cs & ct)).values())  

6010. 完成旅途的最少时间

二分,注意溢出,五行代码

class Solution:
    def minimumTime(self, time: List[int], totalTrips: int) -> int:
        l, r = 1, 10 ** 16
        while l < r:
            m = (l + r) // 2
            l,r = (l,m) if sum(m//t for t in time)>=totalTrips else (m+1,r)
        return l

灵茶山大佬的一行解法,奇妙的带key二分(python3.10支持)!

class Solution:
    def minimumTime(self, time: List[int], totalTrips: int) -> int:
        return bisect_left(range(totalTrips * min(time)), totalTrips, key=lambda x: sum(x // t for t in time))

6011. 完成比赛的最少时间

这题可可没能解决,在参考了灵茶山大佬的的题解后整理成了下面的八行代码:👇

class Solution:
    def minimumFinishTime(self, tires: List[List[int]], t: int, n: int) -> int:
        min_sec = [float('inf')] * 18
        for f, r in tires:
            x, time, sum = 1, f, 0
            while time <= t + f:sum,min_sec[x],time,x = sum+time,min(min_sec[x], sum+time),time*r,x+1
        f = [-t]+[0] * (n + 1)
        for i in range(1, n + 1):
            f[i] = t + min(f[i - j] + min_sec[j] for j in range(1, min(18, i + 1)))
        return f[n]

总结

T1+T2+T3+T4 一共 1+2+1+8=12行代码,完成【20行完成周赛】的目标!

此外,可可也了解到python3.10有许多好用的新特性,这将是可可下一周的学习目标!

评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

可可卷

不要看到我~~

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

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

打赏作者

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

抵扣说明:

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

余额充值