当前位置: 首页 > 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 np
MOD = 10**9 + 7
class Solution:
def zigZagArrays(self, n: int, l: int, r: int) -> int:
d = r-l+1
vec = [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] = 1
for j in range(i):
M[i+d][j] = 1
M = np.array(M, dtype=object)
def pow_mul(M, vec, n):
res = vec
while n:
if n % 2 == 1:
res = (M @ res) % MOD
M = (M @ M) % MOD
n = n // 2
return res
res = pow_mul(M, vec, n-1)
return sum(res) % MOD

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

http://www.gsyq.cn/news/35139.html

相关文章:

  • 老旧环境torch版本(0.4.1)环境配置总结
  • 代码大全阅读笔记3
  • 通过中国信通院SQL质量管理最高等级评测,天翼云TeleDB引领数据库管理新标准!
  • 代码大阅读笔记
  • 第二次软件基础作业
  • 实用指南:从0死磕全栈之Next.js Server Actions 入门实战:在服务端安全执行逻辑,告别 API 路由!
  • 重塑生产力:天翼云全球首发RaaS,开启“机器人即服务”商业时代!
  • Sequence2Sequence - -一叶知秋
  • 第177天:信息收集篇自动项目本机导出外部打点域内通讯PillagerBloodHound
  • 如何在Linux中,为Flatpak版本的Edge浏览器导入证书
  • Java 集合 “Map(1)”面试清单(含超通俗生活案例与深度理解) - 教程
  • 2025 年铸铁井盖生产厂家最新推荐榜,技术实力与市场口碑深度解析防沉降球墨/防沉降/电力/双层铸铁井盖公司推荐
  • Bilidown Setup 1.2.7下载
  • 0291-Nand-实现基础逻辑门(一)
  • NASM下载和安装教程(附安装包)
  • 0292-Nand-实现基础逻辑门(二)
  • 单点登录SSO是怎么实现的?
  • 2025年上海房产继承律师权威推荐榜单:继承律师/离婚律师/婚姻律师事务所精选
  • autotiny下载_v3.0.0.2
  • Python嵌套_多条件判断 _ 对象今天会生气吗 II
  • 解析视频融合平台EasyCVR的分析平台技术如何成为“全域视频管理中台”
  • 2025年10月logo/VI设计专业公司权威推荐排行榜:探索年最佳设计服务
  • 深入解析:GitPuk入门教程:安装及使用指南,一文轻松上手
  • 完整教程:Linux启动流程与字符设备驱动详解 - 从bootloader到驱动开发
  • 学术会议会议合集 | 电子信息工程、计算机技术、文学、人文发展、数字经济等EI会议合集
  • 2025 年弯管机生产厂家最新推荐榜,技术实力与市场口碑深度解析且高性能与可靠性兼具四轴/双轴/双层膜弯管机公司推荐
  • 2025年智慧厕所厂家权威推荐榜单:智慧厕所智能水表/智慧公厕系统/智慧厕所源头厂家精选
  • 用Circom和Snarkjs实践零知识证明技术
  • ubuntu24 输入法优化
  • 基于DCT变换和Huffman编码的图像压缩解压缩算法matlab性能仿真