写在前面的话:
大家好,我是一名正在努力学习数据结构和算法的新手。这篇文章是我在学习python的各类数据结构以及基础算法过程中的一些笔记和心得,希望能和同样在学习该方面知识的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便我能不断学习和进步。同时,我也会在文章中注明参考的资料,以示对原作者的尊重。
PS:本帖以记录学习心得和刷题记录解析为主,没有其他大博主那么专业,但是简单易懂^-^
本贴的其他相关学习笔记资料可以通过订阅专栏获取,喜欢的小伙伴可以多多点赞+关注呀!后续会 持续更新相关资源的~
学习资源指路:
埃氏筛/欧拉筛教程以及代码实现-参考文章:欧拉筛【力扣周赛 326】LeetCode_哔哩哔哩_bilibili
leetcode 2523 题干:
这一题的核心思想还是筛选质数,用欧拉筛or埃氏筛都可以AC。只不过这一题需要考虑堆筛选出的质数再进行筛选和输出的过程。
很经典的通过while循环更新变量来依次比较大小(代码)
埃氏筛正确解法:
class Solution:
def closestPrimes(self, left: int, right: int) -> List[int]:
primes=[]
data_list=[True]*(right+1)
for i in range(2,right+1):
if data_list[i]: #注意是列表对应的值是True,而不是整个列表!!
primes.append(i)
for j in range(i*i,right+1,i):
data_list[j]=False
primes.append(right+1)
primes.append(right+1)
primes2=[i for i in primes if i >=left]
p=q=-1
i=0
while primes2[i+1]<=right:
if p<0 or primes2[i+1]-primes2[i]<p-q:
p,q=primes2[i+1],primes2[i]
i+=1
return [q,p]
、
欧拉筛正确解法:
class Solution:
def closestPrimes(self, left: int, right: int) -> List[int]:
primes=[]
data_list=[True]*(right+1)
for i in range(2,right+1):
if data_list[i]: #注意是列表对应的值是True,而不是整个列表!!
primes.append(i)
for p in primes:
if p*i>right:
break
data_list[p*i]=False
if i%p==0:
break
primes.append(right+1)
primes.append(right+1)
primes2=[i for i in primes if i >=left]
p=q=-1
i=0
while primes2[i+1]<=right:
if p<0 or primes2[i+1]-primes2[i]<p-q:
p,q=primes2[i+1],primes2[i]
i+=1
return [q,p]
最后,感谢每一位阅读这篇文章的朋友,你们的反馈对我来说非常宝贵。如果有任何问题或建议,请随时告诉我。让我们一起学习和进步吧!如果您喜欢我的内容,别忘了点赞和关注哦,我会定期分享更多有价值的信息。