找到需要补充粉笔的学生编号(中等题)

该文章介绍了一个关于学生按顺序回答问题并消耗粉笔的问题。学生根据各自编号消耗不同数量的粉笔,当粉笔不足时需要补充。提供的解决方案首先计算粉笔总消耗,然后使用取模运算减少检查次数,最后通过循环遍历找到需要补充粉笔的学生。算法实现了O(n)的时间复杂度。
摘要由CSDN通过智能技术生成

一个班级里有 n 个学生,编号为 0 到 n - 1 。每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 n - 1 的学生,然后老师会重复这个过程,重新从编号为 0 的学生开始回答问题。

给你一个长度为 n 且下标从 0 开始的整数数组 chalk 和一个整数 k 。一开始粉笔盒里总共有 k 支粉笔。当编号为 i 的学生回答问题时,他会消耗 chalk[i] 支粉笔。如果剩余粉笔数量 严格小于 chalk[i] ,那么学生 i 需要 补充 粉笔。请你返回需要 补充 粉笔的学生 编号 。

思路:

首先将数组求和,再用k取模,这样可以减少遍历次数。然后从头开始遍历即可,最终只要O(n)复杂度。

class Solution:
    def chalkReplacer(self, chalk: List[int], k: int) -> int:
        n = len(chalk)
        i = 0
        sum = 0
        for j in chalk:
            sum += j
        k = k%sum
        while k>=0:
            k -= chalk[i]
           
            if k<0:
                break
            
            i = i+1
        
        return i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HUSTer-deeplearning

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值