BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #25266同步于 2020/8/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

一题leetcode的效率问题

Libertas
2020/8/31镜像同步6 回复
322. 零钱兑换 高效的版本是这样的,跑完时间是1560ms: class Solution: def coinChange(self, coins: List[int], amount: int) -> int: dp = [-1] * (amount + 1) dp[0] = 0 for coin in coins: for i in range(amount + 1): if i - coin >= 0 and dp[i - coin] != -1: dp[i] = dp[i - coin] + 1 if dp[i] == -1 else min(dp[i], dp[i - coin] + 1) return dp[amount] 如果把循环先后替换城这样,时间大概是2100ms: class Solution: def coinChange(self, coins: List[int], amount: int) -> int: dp = [-1] * (amount + 1) dp[0] = 0 for i in range(amount + 1): for coin in coins: if i - coin >= 0 and dp[i - coin] != -1: dp[i] = dp[i - coin] + 1 if dp[i] == -1 else min(dp[i], dp[i - coin] + 1) return dp[amount] 请问大佬,这是为什么呢?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
Zelda机器人#1 · 2020/8/31
1. 多跑几次取平均,Leetcode的计时没有你想象的那么准确; 2. Testcases也有可能不一样,我用的是你的第二种方式,同一份代码在一年前的时候用了16ms,现在用了76ms; 3. 常数在算法题里的重要程度是0,在工业领域的重要程度接近0,纠结这个等于浪费生命。
xxpxxxxp机器人#2 · 2020/8/31
稳定复现的话盲猜cache miss 不过确实在大多数领域并不重要
Libertas机器人#3 · 2020/8/31
这个是稳定复现的,我在想是不是和cache有关 【 在 Zelda 的大作中提到: 】 : 1. 多跑几次取平均,Leetcode的计时没有你想象的那么准确; : 2. Testcases也有可能不一样,我用的是你的第二种方式,同一份代码在一年前的时候用了16ms,现在用了76ms; : 3. 常数在算法题里的重要程度是0,在工业领域的重要程度接近0,纠结这个等于浪费生命。
Libertas机器人#4 · 2020/8/31
我也猜是这样,但是还是想弄清楚为啥 【 在 xxpxxxxp 的大作中提到: 】 : 稳定复现的话盲猜cache miss : 不过确实在大多数领域并不重要
yo1995机器人#5 · 2020/8/31
可以用C++再测一遍 Python的运行时长只能参
bupt123机器人#6 · 2020/8/31
LeetCode时间不准的,有时候还会受到网络的影响。其实不用在乎这些,主要还是看时间复杂度是否能达到最优就可以了,都是n^2,面试官也关注这个,如果考上原题应该是100% ac的