leetcode-Count Primes 以及python的小特性
题目大家都非常熟悉,求小于n的所有素数的个数。
自己写的python 代码老是通不过时间门槛,无奈去看了看大家写的code。下面是我看到的投票最高的code:
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution: # @param {integer} n # @return {integer} def countPrimes( self , n): if n < 3 : return 0 primes = [ True ] * n primes[ 0 ] = primes[ 1 ] = False for i in range ( 2 , int (n * * 0.5 ) + 1 ): if primes[i]: primes[i * i: n: i] = [ False ] * len (primes[i * i: n: i]) return sum (primes) |
下面的code是有人针对上面这个code进行改进的code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Solution( object ): def countPrimes( self , n): """ :type n: int :rtype: int """ if n < = 2 : return 0 prime = [ True ] * n prime[: 2 ] = [ False , False ] for base in xrange ( 2 , int ((n - 1 ) * * 0.5 ) + 1 ): if prime[base]: prime[base * * 2 ::base] = [ False ] * len (prime[base * * 2 ::base]) return sum (prime) |
算法都是一样的,细节处有些不同,比方在对开头if的判断;对prime数组赋值的语句。这里我很好奇,这些改变到底有没有性能的提升,提升了多少。
下面是我的在python下得分析:
1 2 3 4 5 6 7 8 9 10 11 12 13 | ➜ ~ python - m timeit - s 'int(3 ** 0.5) + 1' 100000000 loops, best of 3 : 0.0119 usec per loop ➜ ~ python - m timeit - s 'int(3 ** 0.5 + 1)' # better but not obiviosly 100000000 loops, best of 3 : 0.0117 usec per loop ➜ ~ python - m timeit - s 'l = [False] * 1000' 'l[0] = l[1] = True' # better 10000000 loops, best of 3 : 0.102 usec per loop ➜ ~ python - m timeit - s 'l = [False] * 1000' 'l[:2] = [True, True]' 10000000 loops, best of 3 : 0.172 usec per loop ➜ ~ python - m timeit - s 'for i in range(100): i >= 2' 100000000 loops, best of 3 : 0.0118 usec per loop ➜ ~ python - m timeit - s 'for i in range(100): i > 3' # better but not obiviosly 100000000 loops, best of 3 : 0.0116 usec per loop |
所以总结下来:
1. 如果我们使用int()之后还要做算术运算,最好先把最终结果算出来,再进行int操作;
2. 如果我们想要对某个数列进行赋值,单个的进行赋值比使用[:]批量赋值要快(这个从实用性来看具体场合具体分析)
3. 如果我们进行大小判断,单纯的><比 >= <=要计算的更快一些。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?