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

Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation

  • Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3629. Minimum Jumps to Reach End via Prime Teleportation

1. 解题思路

这一题思路上还是比较直接的,就是一个广度优先遍历,考察各条路径当中最先到达终点的走法。

但是,要进行路径的遍历,我们需要提前计算出jump点,也就意味着我们必须要提前找出所有的素数节点以及其对应的可以跳跃的位置,即对于那些非素数的节点,我们要找出他们各自都有哪些质因素才行。

而这个就是一个基础优化的问题了,这里就不过多展开了,大家对这代码理解一下就行,简单来说就是一个数要么自己是一个素数,要么他必然可以拆成两个数的乘积,那么至少其有一个质因子小于其平方根,因此,我们就可以优化我们的遍历过程了。

2. 代码实现

给出python代码实现如下:

def get_primes(n):status = [0 for _ in range(n+1)]primes = set()for i in range(2, n+1):if status[i] != 0:continueprimes.add(i)for j in range(i, n+1, i):status[j] = 1return primesPRIMES = get_primes(10**6)
PRIME_LIST = list(sorted(PRIMES))class Solution:def minJumps(self, nums: List[int]) -> int:n = len(nums)@lru_cache(None)def get_prime_factors(num):if num in PRIMES:return [num]idx = bisect.bisect_right(PRIME_LIST, sqrt(num)+1)-1for i in range(idx, -1, -1):if num % PRIME_LIST[i] == 0:while num % PRIME_LIST[i] == 0:num = num // PRIME_LIST[i]return [PRIME_LIST[i]] + get_prime_factors(num)return []primes = {num for num in nums if num in PRIMES}jump = defaultdict(list)for i, num in enumerate(nums):for p in get_prime_factors(num):if p in primes:jump[p].append(i)     seen = {0}q = [(0, 0)]while q:step, idx = heapq.heappop(q)idx = -idxif idx == n-1:return stepif idx-1 >= 0 and idx-1 not in seen:heapq.heappush(q, (step+1, -idx+1))seen.add(idx-1)if idx+1 < n and idx+1 not in seen:if idx+1 == n-1:return step+1heapq.heappush(q, (step+1, -idx-1))seen.add(idx+1)if nums[idx] in PRIMES:for nxt in jump[nums[idx]]:if nxt == n-1:return step+1if nxt not in seen:heapq.heappush(q, (step+1, -nxt))seen.add(nxt)return -1

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

http://www.dtcms.com/a/301205.html

相关文章:

  • 由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程
  • Java异常处理
  • 使用Python,OpenCV计算跑图的图像彩色度
  • 移植pbrt中的并行化到ray trace in weeks中
  • JVM内存结构
  • 零基础学习性能测试第五章:JVM性能分析与调优-JVM运行时内存区域介绍
  • 企业级数据架构构建之道
  • Unity FXAA
  • SQL注入SQLi-LABS 靶场less21-25详细通关攻略
  • Ubuntu普通用户环境异常问题
  • Linux->自定义shell
  • Acrobat 文件夹级脚本扩展表单功能
  • 【奔跑吧!Linux 内核(第二版)】第4章:内核编译和调试
  • 物联网安装调试-物联网网关
  • Python数据分析基础(二)
  • 两个函数的卷积
  • Kafka——消费者组消费进度监控都怎么实现?
  • 数字签名与数字证书
  • [leetcode] 图论算法(DFS和BFS)
  • Java“class file contains wrong class”解决
  • NX868NX872美光固态闪存NX873NX876
  • 疯狂星期四文案网第21天运营日记
  • 10.模块与包:站在巨人的肩膀上
  • 去除视频字幕 5: 使用 ProPainter, 记录探索过程
  • red靶机
  • MCU 通用AT指令处理框架
  • 洛谷 P2114 [NOI2014] 起床困难综合症-普及+/提高
  • AutoLabelImg:高效的数据自动化标注工具和下载
  • 风光氢系统仿真与容量扩展设计
  • 飞牛NAS本地化部署n8n打造个人AI工作流中心