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

本文介绍了四道LeetCode周赛题目,包括寻找最接近0的数字、钢笔铅笔购买方案、ATM设计及节点序列最大得分问题。展示了使用min函数key参数、for循环与sum、numpy数组操作以及itertools.product等技巧实现的一行解法和简洁代码。同时,通过ATM类详细解释了存取款功能的实现。
摘要由CSDN通过智能技术生成

6060. 找到最接近 0 的数字

一行

class Solution:
    def findClosestNumber(self, nums: List[int]) -> int:
        return max([x if abs(x)==abs(min(nums,key=abs)) else -2e5 for x in nums])

2240. 买钢笔和铅笔的方案数

一行

class Solution:
    def waysToBuyPensPencils(self, total: int, cost1: int, cost2: int) -> int:
        return sum((total-cost1*i)//cost2+1 for i in range(total//cost1+1))

2241. 设计一个 ATM 机器

numpy,十行

import numpy as np
a=[20,50,100,200,500]

class ATM:

    def __init__(self):
        self.nums=np.zeros(5).astype('int64')

    def deposit(self, banknotesCount: List[int]) -> None:
        self.nums+=np.array(banknotesCount)

    def withdraw(self, amount: int) -> List[int]:
        res=[0]*5
        for i in range(4,-1,-1):
            res[i]=min(amount//a[i],self.nums[i])
            amount-=res[i]*a[i]
        if amount>0:return [-1]

        self.nums-=np.array(res)
        return [*map(int,iter(res))]

# Your ATM object will be instantiated and called as such:
# obj = ATM()
# obj.deposit(banknotesCount)
# param_2 = obj.withdraw(amount)

6063. 节点序列的最大得分

灵神题解,改写了一行部分,七行代码👇

class Solution:
    def maximumScore(self, scores: List[int], edges: List[List[int]]) -> int:
        g = [[] for _ in range(len(scores))]
        for x, y in edges:
            g[x].append((scores[y], y))
            g[y].append((scores[x], x))
        for i, vs in enumerate(g):
            g[i] = nlargest(3, vs)
            
        return -1 if not edges else max(chain(max(score_a + scores[x] + scores[y] + score_b if y != a != b != x else -1 for (score_a, a), (score_b, b) in product(g[x], g[y])) for x, y in edges)) 

总结

推荐学习:

T1:min函数key参数
T2:sum……for
T3:numpy,unpack
T4:product
本次周赛一共1+1+10+7=19行,完成【20行完成周赛】的目标!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

可可卷

不要看到我~~

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

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

打赏作者

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

抵扣说明:

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

余额充值