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

Leetcode 3700. Number of ZigZag Arrays II

  • Leetcode 3700. Number of ZigZag Arrays II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3700. Number of ZigZag Arrays II

1. 解题思路

这一题事实上就是上一题3699. Number of ZigZag Arrays I的进阶版本,主要的变化就是增加了nnn的复杂度,nnn最大可以取到10910^9109,因此暴力的迭代显然就不现实了,但其核心的迭代公式依然还是上一题中分析的那样:
{un+1i=∑j=i+1rdnjdn+1i=∑j=li−1unj\left\{ \begin{aligned} u_{n+1}^i &= \sum\limits_{j=i+1}^{r} d_{n}^{j} \\ d_{n+1}^i &= \sum\limits_{j=l}^{i-1} u_{n}^{j} \end{aligned} \right. un+1idn+1i=j=i+1rdnj=j=li1unj

这里,注意到,如果我们令v⃗=concat(u⃗,d⃗)\vec{v} = \mathop{concat}(\vec{u}, \vec{d})v=concat(u,d),那么事实上上述迭代过程可以写作是一个矩阵乘法:
v⃗n+1=M⋅v⃗n\vec{v}_{n+1} = M \cdot \vec{v}_{n} vn+1=Mvn

因此,不难推导:
v⃗n=Mn−1⋅v⃗1\vec{v}_{n} = M^{n-1} \cdot \vec{v}_{1} vn=Mn1v1

此时,问题也就变成了如何快速地求矩阵MMMn−1n-1n1了,这个就变成了一个常规的二分处理的算法了。

当然,既然这里涉及到了矩阵乘法,因此,我们自然而然就可以使用numpy来加速一下运算了,这里就不过多展开了。

2. 代码实现

给出python代码实现如下:

import numpy as npMOD = 10**9 + 7class Solution:def zigZagArrays(self, n: int, l: int, r: int) -> int:d = r-l+1vec = [1 for _ in range(d-1)] + [0] + [0] + [1 for _ in range(d-1)] vec = np.array(vec, dtype=object)M = [[0 for _ in range(2*d)] for _ in range(2*d)]for i in range(d):for j in range(i+1, d):M[i][d+j] = 1for j in range(i):M[i+d][j] = 1M = np.array(M, dtype=object)def pow_mul(M, vec, n):res = vecwhile n:if n % 2 == 1:res = (M @ res) % MODM = (M @ M) % MODn = n // 2return res                res = pow_mul(M, vec, n-1)return sum(res) % MOD

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

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

相关文章:

  • Turbopack介绍(由Vercel开发的基于Rust的高性能前端构建工具,用于挑战传统构建工具Webpack、vite地位)Next.js推荐构建工具
  • 网站自适应 如何做ui设计可以从事什么工作
  • 【学习记录】宝塔面板 + Docker 快速部署 RustDesk 自建远程控制服务器
  • 【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
  • ollama的下载以及Spring AI Alibaba的ChatModel和ChatClient的流式输出和在idea的实现
  • 自己搭建服务器 发布网站 域名如何申请深圳专业做网站专业
  • 【pytest】fixture 内省(Introspection)测试上下文
  • 【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享
  • 嵌入式硬件——基于IMX6ULL的I2C实现
  • 【ROS2学习笔记】分布式通信
  • 唐尧文化 网站建设工作总结邢台手机网站制作
  • 心脏病监测数据可视化分析
  • 【机器人】WMNav 将VLM融入世界模型 | 零样本目标导航 | IROS‘25
  • 第七课(零基础友好版)|机器学习像养宠物:数据—训练—测试(五年级·自学)
  • 无法解析插件 org.apache.maven.plugins:maven-site-plugin:3.12.1
  • 即墨网站建设哪里有安卓app怎么开发
  • 告别性能焦虑:Python 性能革命实践指南
  • Android dmabuf_dump 命令详解
  • Android 中的 mk 和 bp 文件编译说明
  • 配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒
  • 青海网站制作腾讯视频wordpress
  • 免费建设钓鱼网站平台wordpress中文开发文档下载
  • JavaScript 测试 jQuery
  • 第2章:项目框架搭建
  • Java 网络请求 Jar 包选型指南:从基础到实战
  • 一文讲通跨域
  • CORS、Nginx代理与JSONP方案对比
  • 详细分析 Mosquitto 核心模块 Property_Mosq.c 的功能与 MQTT v5.0 属性管理
  • Docker 资源限制与性能优化(CPU / 内存 / IO 管控实战)
  • 济宁专业建网站知名网站建设商家