当前位置: 首页 > news >正文

Leetcode 3556. Sum of Largest Prime Substrings

  • Leetcode 3556. Sum of Largest Prime Substrings
    • 1. 解题思路
    • 2. 代码实现
    • 3. 算法优化
  • 题目链接:3556. Sum of Largest Prime Substrings

1. 解题思路

这一题毕竟只是这一次双周赛的第一题,虽然标记为medium的题目,但是思路上还是非常简单的,只需要对所有的数字进行一下遍历,然后考察一下其是否为质数即可。

虽然这样遍历的算法复杂度会是 O ( N 2 ) O(N^2) O(N2),但由于数字的最大位数只有10位,因此无伤大雅。

问题的真正麻烦的在于对任意一个数如何判断它是否是质数,如果真的暴力去求解,那么需要的时间复杂度就会是 O ( N l o g N ) O(NlogN) O(NlogN),其中 N N N是数的大小,考虑到 N N N可能是一个10位数,这显然太大了,因此我们需要对这个进行一下优化,具体来说就是对 N N N进行一下开方,只要比 N \sqrt{N} N 小的所有质数均无法整除 N N N,那么 N N N必为一个质数。

2. 代码实现

给出python代码实现如下:

class Solution:def sumOfLargestPrimes(self, s: str) -> int:def is_prime(num):if num == 1:return Falsem = min(ceil(math.sqrt(num)) + 1, num)status = [0 for _ in range(m)]for i in range(2, m):if status[i] == 1:continueif num % i == 0:return Falsefor j in range(i, m, i):status[j] = 1return Trueprimes = set()n = len(s)for i in range(n):for j in range(i+1, n+1):num = int(s[i:j])if is_prime(num):primes.add(num)primes = sorted(primes, reverse=True)[:3]return sum(primes) if len(primes) > 0 else 0

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

3. 算法优化

进一步的,我们可以将质数的计算部分提取出来作为global变量,这样可以进一步减少重复计算,从而优化效率。

给出优化后的代码实现如下:

def get_primes(n):primes = set()status = [0 for _ in range(n+1)]for i in range(2, n+1):if status[i] == 0:primes.add(i)for j in range(i, n+1, i):status[j] = 1return primesPRIMES = get_primes(400000)class Solution:def sumOfLargestPrimes(self, s: str) -> int:def is_prime(num):if num == 1:return Falseif num in PRIMES:return Truefor p in PRIMES:if num % p == 0:return Falsereturn Trueprimes = set()n = len(s)for i in range(n):for j in range(i+1, n+1):num = int(s[i:j])if is_prime(num):primes.add(num)primes = sorted(primes, reverse=True)[:3]return sum(primes) if len(primes) > 0 else 0

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

相关文章:

  • 《1.1_4计算机网络的分类|精讲篇|附X-mind思维导图》
  • 如何设计ES的冷热数据分离架构?Elasticsearch 集群如何实现高可用?如何避免脑裂问题?如果出现脑裂如何恢复?
  • API Gateway CLI 实操入门笔记(基于 LocalStack)
  • 基于 docker 部署 k8s 集群
  • 集星云推短视频矩阵系统的定制化与私有化部署方案
  • redis在Spring中的一些使用
  • 机器学习中的线性回归:从理论到实践的深度解析
  • 企业数据安全全生命周期守护方案:从组织到技术的三维实践
  • PyTorch实战——生成对抗网络数值数据生成
  • (自用)Java学习-5.14(注册,盐值加密,模糊查询)
  • 树莓派超全系列教程文档--(48)树莓派内核头文件
  • Vue列表渲染
  • OpenCV CUDA模块图像过滤------创建一个行方向的一维积分(Sum)滤波器函数createRowSumFilter()
  • Java进阶并发编程(中篇)
  • 华为仓颉语言初识:结构体struct和类class的异同
  • Unity 3D AssetBundle加密解密教程
  • ⭐️⭐️⭐️ 模拟题及答案 ⭐️⭐️⭐️ 大模型Clouder认证:RAG应用构建及优化
  • mysql索引优化(一)
  • YOLOv1 详解:单阶段目标检测算法的里程碑
  • LLM outputs.loss 返回什么
  • h5手机网站发展趋势/鞍山seo优化
  • 门户网站策划书/重庆seo整站优化外包服务
  • 网站开发哪家公司比较好/电商怎么推广自己的产品
  • 做网站的IDE/百度在线下载
  • 哪个网站可以做微信头图/推广方案如何写
  • 利用免费网站做SEO/域名收录