Leetcode 3494. Find the Minimum Amount of Time to Brew Potions

1. 解题思路

这道题虽说算是搞定了,通过了全部的测试样例,不过还是很暴力的求解的,整体的算法复杂度还是 O ( N M ) O(NM) O(NM),应该只是勉勉强强没有超时吧,没想到啥更好的思路……

我这边的思路的话其实就是非常暴力的遍历求每一轮的最早开始的时间,显然,当前一轮最早的开始时间需要满足此时每一个人手上都是空闲的,即要求遍历每一个巫师时,满足条件当前一轮当中他们之前所有人完成工作的时间点不小于他完成上一轮工作的时间,即:
s t a r t j + ∑ k = 0 i − 1 s k i l l k × m a n a j ≥ s t a r t j − 1 + ∑ k = 0 i s k i l l k × m a n a j − 1 \mathop{start}_{j} + \sum\limits_{k=0}^{i-1}\mathop{skill}_k \times \mathop{mana}_j \geq \mathop{start}_{j-1} + \sum\limits_{k=0}^{i}\mathop{skill}_k \times \mathop{mana}_{j-1} startj+k=0i1skillk×manajstartj1+k=0iskillk×manaj1

由此,我们即可得到每一轮的最早开始时间,进而,我们即可求得最早的完成时间。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minTime(self, skill: List[int], mana: List[int]) -> int:
        n, m = len(skill), len(mana)
        cumsum_skill = list(accumulate(skill, initial=0))
        st = [0 for _ in range(m)]
        for j in range(1, m):
            for i in range(n):
                st[j] += max(0, st[j-1] + cumsum_skill[i+1]*mana[j-1] - st[j] - cumsum_skill[i]*mana[j])
        return st[-1] + cumsum_skill[-1] * mana[-1]

提交代码评测得到:耗时14843ms,占用内存18.2MB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值