算法与数据结构:质数、互质判定和裴蜀定理
文章目录
- 质数
- 质数判定
- 质数筛选
- 质因数分解
- 互质判定
- 裴蜀定理
质数
首先回顾「质数」的定义:若一个正整数无法被除了 1 和它自身之外的任何自然数整除,则称该数为质数(或素数),否则称该正整数为合数。
根据上述定义,我们可以得知常见的质数有 2、3、5 等。另外,在整个自然数集合中,质数的分布也比较稀疏,对于一个足够大的整数 N,不超过 N 的质数大约有
N / ln ( N ) N/\ln(N) N/ln(N) 个。
质数判定
常见的判定质数的方式是「试除法」,假设自然数 N 不是质数,则一定存在一对数
x, y ,使得下述条件成立:
N = x ⋅ y 1 < x ≤ N ≤ y < N N = x · y \\ 1< x \leq \sqrt N \leq y < N N=x⋅y1<x≤N≤y<N
因此我们可以在 [ 2 , N ] [2, \sqrt N] [2,N] 的范围内枚举 x, 判断 x 是否存在。
如果 x 存在,则 N 为合数;否则 N 为质数。该算法时间复杂度为 O ( N ) O(\sqrt N) O(N)
,具体代码如下所示:
// c语言
bool judgePrime(int n) {for (int i = 2; i * i <= n; i++) {if (n % i == 0) return false;}return true;
}
def judgePrime(n):for i in range(2, int(n**0.5) + 1):if n % i == 0:return Falsereturn True
质数筛选
对于一个正整数 N,一次性求出 1~N 之间所有的质数,即为质数筛选。
显然根据上述「质数判定」的内容,我们可以通过枚举 1~N 的所有数,再依次使用「试除法」来判定其是否为质数,从而完成质数的筛选。但此种方法的时间复杂度过高,为 O ( N N ) O(N\sqrt N) O(NN) 。
此处将介绍经典的「Eratosthenes
筛法」,也被称为「埃式筛」。该算法基于一个基本判断:任意质数 x 的倍数 ( 2x,3x,… ) 均不是质数。
根据该基本判断,我们得到如下算法过程:
- 将 2~N中所有数标记为 0
- 从质数 2 开始从小到大遍历2 ~ N中所有自然数
- 如果遍历到一个标记为 0 的数 x ,则将其 2~N 中 x 的所有倍数标记为 1
根据上述过程,不难发现如果一个数 x 的标记为 0,则代表这个数不是 2~(x-1) 中任何数的倍数,即 x 为质数。
接下来我们以 2~10 为例,具体过程如下所示,最终标记为橙色的数为质数:
「Eratosthenes
筛法」的时间复杂度为 O ( N log ( log ( N ) ) ) O(N\log(\log(N))) O(Nlog(log(N))) ,并不是最快的素数筛法,但在绝大多数的「力扣数学题」中均已够用,且其实现代码较为简单,具体如下所示:
vector<int> primes, vis;
void get_primes(int n) {vis.resize(n + 1, 0);for(int i = 2; i <= n; i++) {if(vis[i] == 0) {primes.push_back(i);for(int j = i; j <= n; j += i) vis[j] = 1;}}
}
# Eratosthenes筛法def get_primes(n):"""获取n以内的所有素数"""if n < 2:return []primes = [True] * (n + 1)primes[0] = primes[1] = Falsefor i in range(2, int(n**0.5) + 1):if primes[i]:for j in range(i * i, n + 1, i):primes[j] = Falsereturn [i for i in range(n + 1) if primes[i]]print(get_primes(100))[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
质因数分解
根据「唯一分解定理」,任何一个大于 1 的正整数都能唯一分解为有限个质数的乘积: N = p 1 c 1 p 2 c 2 … p m c m N = p_1^{c_1}p_2^{c_2}…p_m^{c_m} N=p1c1p2c2…pmcm
其中 c i c_i ci 均为正整数,而 p i p_i pi 均为质数,且满足 p 1 < p 2 < … < p m p_1 < p_2 < … < p_m p1<p2<…<pm 。
根据上述定理,我们只需要求出所有的 p i , c i p_i, c_i pi,ci ,即可完成对 N 的质因数分解。
那么如何求取 p i , c i p_i, c_i pi,ci 呢?首先我们考虑如何求 p 1 p_1 p1 和 c 1 c_1 c1 。
由于 p 1 < p 2 < … < p m p_1 < p_2 < … < p_m p1<p2<…<pm ,且 p 1 p_1 p1 为质数,因此不难发现, p 1 p_1 p1 是 N 所有因子中除 1 以外最小的数。
因此我们可以枚举 2 ~ N 2~\sqrt N 2~N中的所有数 x,如果 N 是 x 的倍数,则 x 为 p 1 p_1 p1。得到 p 1 p_1 p1 后,我们可以令 N 不断除以 p 1 p_1 p1 直至其不再为 p 1 p_1 p1 的倍数,则 c 1 c_1 c1 等于除以 p 1 p_1 p1 的总次数。
得到 p 1 p_1 p1 和 c 1 c_1 c1 后,N 去除了所有的 p 1 p_1 p1,因此 N 变为 p 2 c 2 … p m c m p_2^{c_2}…p_m^{c_m} p2c2…pmcm。又由于 p 1 < p 2 p_1 < p_2 p1<p2 ,因此我们继续枚举 x,如果再次出现 N 是 x 倍数的情况,则 x 为 p 2 p_2 p2 。
不断使用上述算法,直至循环结束。最后还需判断 N 是否为 1,如果 N 不为 1,则 p m = N , c m = 1 p_m = N, c_m = 1 pm=N,cm=1。
该算法的时间复杂度为 O ( l o g ( N ) ) O(log(N)) O(log(N)) ,具体代码如下所示,大家可以配合代码对该算法进行理解:
void divide(int n) {vector<int> p, c;for (int i = 2; i * i <= n; i++) {if (n % i == 0) {p.push_back(i);int num = 0;while(n % i == 0) num++, n /= i;c.push_back(num);}}if (n > 1) {p.push_back(n);c.push_back(1);}
}
# 质因数分解-唯一分解定理def divide(n):"""质因数分解"""i = 2factors = []while i * i <= n:print("i = ", i)print("n = ", n)if n % i:i += 1else:n //= ifactors.append(i)if n > 1:factors.append(n)return factorsprint("质因数分解-唯一分解定理")
print(divide(100)) # [2, 2, 5, 5]
互质判定
首先介绍一下「最大公约数」的概念。如果自然数 c 同时是自然数 a 和 b 的约数,即 a 和 b 同时是 c 的倍数,则 c 为 a 和 b 的公约数。
「最大公约数」就是 a 和 b 的所有公约数中最大的那一个,通常记为 g c d ( a , b ) gcd(a,b) gcd(a,b) 。
由此我们可以得到「互质」的判定条件,如果自然数 a,b 互质,则 g c d ( a , b ) = 1 gcd(a,b) = 1 gcd(a,b)=1 。
于是问题变为「如何求 g c d ( a , b ) gcd(a,b) gcd(a,b)?」
此处需要引入「欧几里得算法」,如下所示:
∀ a , b ∈ N , b ≠ 0 , g c d ( a , b ) = g c d ( b , a m o d b ) \forall a,b \in N, b \neq 0, gcd(a,b) = gcd(b, a \quad mod \quad b) ∀a,b∈N,b=0,gcd(a,b)=gcd(b,amodb)
根据上述算法,可以得到如下代码,其时间复杂度为 O ( l o g ( a , b ) ) O(log(a,b)) O(log(a,b)):
int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);
}
裴蜀定理
若 a , b , x , y , m a, b, x, y, m a,b,x,y,m 是整数,则 a x + b y = m ax+by = m ax+by=m 有解当且仅当 m 是 g c d ( a , b ) gcd(a,b) gcd(a,b) 的倍数。
该定理有一个重要的推论:整数 a,b 互质的充要条件是存在整数 x,y 使 a x + b y = 1 ax+by=1 ax+by=1。
相关文章:
算法与数据结构:质数、互质判定和裴蜀定理
文章目录 质数质数判定质数筛选质因数分解互质判定裴蜀定理 质数 首先回顾「质数」的定义:若一个正整数无法被除了 1 和它自身之外的任何自然数整除,则称该数为质数(或素数),否则称该正整数为合数。 根据上述定义&…...
基于C#的Modbus通信协议全面解析与实现指南
目录 1. Modbus协议概述 1.1 Modbus网络结构 1.2 Modbus功能码 2. Modbus RTU模式实现 2.1 RTU模式特点 2.2 CRC-16校验算法 2.3 使用NModbus4库实现RTU通信 3. Modbus TCP/IP模式实现 3.1 TCP模式特点 3.2 MBAP报文头结构 3.3 使用NModbus实现TCP通信 3.4 原生TCP套…...
IVX:重构 AI 原生开发范式,让模型调用成为指尖艺术
一、AI 原生开发的技术跃迁:从黑箱集成到白盒重构 在传统 AI 开发范式中,将 GPT-4o、Mediapipe 等模型集成到业务系统往往需要经历 "模型训练 - API 对接 - 前端适配" 的复杂流程。开发团队需同时掌握机器学习框架(如 TensorFlow&…...
源码分析之Leaflet中TileLayer
概述 TileLayer 是 Layer 的子类,继承自GridLayer基类,用于加载和显示瓦片地图。它提供了加载和显示瓦片地图的功能,支持自定义瓦片的 URL 格式和参数。 源码分析 源码实现 TileLayer的源码实现如下: export var TileLayer …...
Java虚拟机 - 程序计数器和虚拟机栈
运行时数据结构 Java运行时数据区程序计数器为什么需要程序计数器执行流程虚拟机栈虚拟机栈作用虚拟机栈核心结构运行机制 Java运行时数据区 首先介绍Java运行时数据之前,我们要了解,对于计算机来说,内存是非常重要的资源,因为内…...
大语言模型 15 - Manus 超强智能体 开源版本 OpenManus 案例与原理深入解析
写在前面 Manus 是由中国初创公司 Monica.im 于 2025 年 3 月推出的全球首款通用型 AI 智能体(AI Agent),旨在实现“知行合一”,即不仅具备强大的语言理解和推理能力,还能自主执行复杂任务,直接交付完整成…...
开源CMS系统中哪些常见的安全漏洞最需要注意?
在当今数字化时代,开源内容管理系统(CMS)因其灵活性和低成本广受欢迎。然而,开源CMS的安全漏洞也频频成为黑客攻击的突破口。本文将带大家全面了解下开源CMS中需要警惕的安全漏洞以及防护建议,以帮助开发者和管理员更好…...
文件包含靶场实现
文件包含漏洞(File Inclusion Vulnerability)是 Web 安全中常见的高危漏洞,主要分为 本地文件包含(LFI) 和 远程文件包含(RFI) 1、典型利用方式 利用方式示例 Payload说明路径遍历?page../../…...
在 JavaScript 中正确使用 Elasticsearch,第二部分
作者:来自 Elastic Jeffrey Rengifo 回顾生产环境中的最佳实践,并讲解如何在无服务器环境中运行 Elasticsearch Node.js 客户端。 想获得 Elastic 认证?查看下一期 Elasticsearch Engineer 培训的时间! Elasticsearch 拥有大量新…...
DataLight(V1.7.12)版本更新发布
DataLight(V1.7.12)版本更新发布 亲爱的 DataLight 用户们, DataLight 发布 V1.7.12 版本,此版本带来了新服务 DINKY 的支持,以及多项问题修复,进一步提升了平台的易用性和稳定性。 一. 更新日志 在此次…...
LeetCode-前缀和-和为K的子数组
LeetCode-前缀和-和为K的子数组 ✏️ 关于专栏:专栏用于记录 prepare for the coding test。 文章目录 LeetCode-前缀和-和为K的子数组📝 和为K的子数组🎯题目描述🔍 输入输出示例🧩题目提示🧪前缀和❓什么…...
MySQL基础关键_014_MySQL 练习题
目 录 一、有以下表,请用一条 SQL 语句查询出每门课程都大于 80 分的学生 二、综合题1(数据自行模拟) 1.查询身份证号为“440401430103082”的申请日期 2.查询同一个身份证号有两条及以上记录的身份证号码及记录个数 3.将身份证号码为“4…...
femap许可与云计算集成
随着云计算技术的迅猛发展,越来越多的企业开始将关键应用和服务迁移到云端,以享受其带来的弹性扩展、高效管理和成本优化等优势。Femap作为一款强大的电磁仿真工具,通过与云计算的集成,将为企业带来前所未有的许可管理和仿真分析体…...
uni-app项目从0-1基础架构搭建全流程
前情 最近新接了一个全新项目,我负责从0开始搭建小程序,我选用的技术栈是uni-app技术栈,UI库选择的是uview-plus,CSS引入现在流行的tainlwindcss,实现CSS原子化书写,实现小程序分包,分包中实现…...
轻量级高性能推理引擎MNN 学习笔记 04.线性回归
1. 线性回归 MNN 官方给的iOS Demo中,输入是图片,输出是分类结果,相对来讲,略微有些复杂,我们现在用一个最简单的线性回归模型,来说明MNN的用法。 该线性回归是yaxb (其中a2,b0.01)…...
使用 React PDF 构建 React.js PDF 查看器的指南
在本文中,我们将重点介绍在React.js中制作 PDF 查看器的最受欢迎的开源库。具体来说,我们将利用著名的开源库react-pdf的功能,指导您完成创建 React.js PDF 查看器的过程。 通过本教程,您将在第一部分学习如何使用 React-PDF 在 …...
动力电池点焊机厂家:驱动新能源制造的精密力量|比斯特自动化
在新能源汽车、储能系统等产业蓬勃发展的背景下,动力电池点焊机作为电池模组生产的核心设备,正经历着技术迭代与市场需求的双重升级。这类厂家通过持续研发与创新,不仅满足了电池制造企业对焊接精度、效率与稳定性的严苛要求,更推…...
React的合成事件(SyntheticEventt)
文章目录 前言 前言 React的合成事件(SyntheticEvent)是React为了统一不同浏览器的事件处理行为而封装的一套跨浏览器事件系统。它与原生事件的主要区别如下: 1. 事件绑定方式 • 合成事件:使用驼峰命名法绑定事件(如…...
知识中台Top5:Baklib上榜推荐
Baklib知识中台优势 在数字化转型浪潮中,Baklib凭借其知识中台的核心设计理念,构建了企业级知识管理的差异化竞争力。区别于传统文档管理系统,该平台通过四库体系(知识资源库、场景规则库、服务模型库、应用组件库)实…...
在Windows系统中使用C++与Orthanc交互:基于DICOMweb的医学影像应用开发
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
视频太大?用魔影工厂压缩并转MP4,画质不打折!
在日常生活中,我们常常需要将视频文件转换成不同的格式以适应各种设备或平台的播放需求。魔影工厂作为一款功能强大且操作简单的视频转换工具,深受用户喜爱。本文中简鹿办公将手把手教你如何使用魔影工厂将视频转换为MP4格式,并进行个性化设置…...
Wan2.1 通过首尾帧生成视频
Wan2.1 通过首尾帧生成视频 flyfish 使用 Wan2.1-FLF2V-14B-720P 模型,通过输入两张图像(起始帧和结束帧),生成一段连贯的视频。 First Last Frame-to-Video 即 “首末帧到视频” 技术 import numpy as np import torch import…...
宝塔+fastadmin:给项目添加定时任务
一、定时任务脚本编写 1. 使用 shebang 声明执行器 #!/usr/bin/env php 这是 Unix/Linux 系统中脚本文件的标准开头。表示这个脚本使用系统环境变量中的 php 来执行。2. 定义 ThinkPHP 入口路径并加载框架 define(APP_PATH, __DIR__ . /../../application/); require __DIR__…...
[自动化集成] 使用明道云上传附件并在Python后端处理Excel的完整流程
在企业日常自动化场景中,使用低代码平台如明道云搭建前端界面,结合自定义Python后端服务,实现灵活数据处理是一种高效的组合方式。本文将分享一个典型的集成用例:用户通过明道云上传文本和Excel附件,Python后端接收并解析这些信息,最终实现完整的数据处理闭环。 项目背景…...
前端项目采用响式布局
要让整个前端项目采用响应式布局,可以从多个方面进行优化,以下是一些具体的建议和实现方法: 1. 使用 ElementPlus 的响应式特性 ElementPlus 组件库本身提供了一些响应式的能力,例如 el-col 组件可以用于创建响应式的网格布局。…...
【Unity】DOTween的常用函数解释
DOTween插件常用函数解释 1.DOTween.To(通用变化动画) 解释:将某一个值在一定的时间内变化到另一个值(通用的函数),可用于大部分的动画变化 使用示例: using UnityEngine; using DG.Tweenin…...
飞桨paddle import fluid报错【已解决】
跟着飞桨的安装指南安装了paddle之后 pip install paddlepaddle有一个验证: import paddle.fluid as fluid fluid.install check.run check()报错情况如下,但是我在pip list中,确实看到了paddle安装上了 我import paddle别的包,…...
ELK简介和docker版安装
使用场景 主要还是给开发人员“打捞日志”用的。 ELK 是由三个开源工具组成的套件(Elasticsearch、Logstash 和 Kibana),主要用于日志的收集、分析和可视化。以下是 ELK 常见的使用场景: 日志集中化管理 收集来自多个服务器或服…...
DockerHub被封禁,怎么将镜像传到国内?一种简单合规的镜像同步到国内方案[最佳实践]
Docker将容器化技术普及,推动云计算向云原生的演进。Docker的核心创新技术之一是容器镜像,它是一种文件的打包方式,将应用程序运行的操作系统、库、运行环境等依赖全部打包一起。在其他任意环境,只要可以运行docker服务࿰…...
飞桨paddle ‘ParallelEnv‘ object has no attribute ‘_device_id‘【已解决】
书借上回,自从我反复重装paddle之后,我发现了,只要pip list中有库,但是代码报错,那就是飞桨没把代码更新完全,只能自己去改源代码 我又遇到报错了: 根据报错信息,找到ParallelEnv报…...
网络安全面试题(一)
文章目录 一、基础概念与模型1. 什么是通信协议?列举三种常见的网络通信模型?2. 解释OSI七层模型及各层功能3. TCP/IP四层模型与OSI模型的对应关系是什么?4. 五层协议体系结构与TCP/IP模型的区别?5. 什么是面向连接与非面向连接的服务&…...
【Leetcode 每日一题】3355. 零数组变换 I
问题背景 给定一个长度为 n n n 的整数数组 n u m s nums nums 和一个二维数组 q u e r i e s queries queries,其中 q u e r i e s [ i ] [ l i , r i ] queries[i] [l_i, r_i] queries[i][li,ri]。 对于每个查询 q u e r i e s [ i ] queries[i] quer…...
RK3588 ArmNN CPU/GPU ResNet50 FP32/FP16/INT8 推理测试
RK3588 ArmNN CPU/GPU ResNet50 FP32/FP16/INT8 推理测试 **背景与目标** 一.性能数据【INT8模型在CPU上推理的结果已经不对,暂未分析原因】二.操作步骤2.1 在x86-Linux上生成onnx模型,以及tflite量化模型(避免在RK3588上安装过多依赖)2.1.1 创建容器2.1.2 安装依赖2.1.3 下载推…...
力扣第5题:最长回文子串(动态规划)
小学生一枚,自学信奥中,没参加培训机构,所以命名不规范、代码不优美是在所难免的,欢迎指正。 标签: 字符串、动态规划、中心扩散法 语言: C 题目: 给你一个字符串s,找到s中最长的…...
HCIP实验五
一、实验拓扑图: 二、实验需求分析: 1. PreVal策略:要求确保R4通过R2到达192.168.10.0/24 ,需在R4上针对去往该网段路由配置PreVal策略,为经R2的路径赋予更高优先值,影响本地路由表选路。 2. AS Path策略…...
python Numpy-数组
目录 Numpy: 一、Ndarray 1 定义 2 数组的属性方法 2.1 数组的维度:np.ndarray.shape 2.2 元素的类型:np.ndarray.dtype 2.3 数组元素的个数:np.ndarray.size 2.4 转置 3 ndarray 所存储元素的数据类型 4 数组创建 4.1 a…...
数据库分库分表从理论到实战
1.分库分表基础理论 1.1 分库分表基本概念 定义:分库分表是一种将单一数据库中的数据分散存储到多个数据库或表中的技术方案,其核心思想是通过"分而治之"的方式解决数据库性能瓶颈问题。分库:将表按业务或数据量拆分到不同数据库中…...
Java异常处理与File类终极指南
Java异常处理与File类终极指南 目录 异常体系全维度拆解异常处理十五种高阶模式自定义异常企业级实践File类深度探索与NIO进化论分布式系统异常处理架构性能调优与安全防护全网最全异常代码库一、异常体系全维度拆解 1.1 Java异常DNA解析 // 异常类的核心继承关系 public cla…...
pmap中的mode列,脏页,写时复制
写时复制(Copy-on-Write,简称 COW) 是一种计算机编程中的优化技术,主要用于内存或存储资源的管理。其核心思想是:只有在真正需要修改数据时,才会执行实际的复制操作,从而避免不必要的资源开销。…...
通过COM获取正在运行的Excel实例并关闭 c#实现
利用COM对象模型获取正在运行的Excel实例并关闭。示例代码如下: using Excel Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; try { Excel.Application excelApp (Excel.Application)Marshal.GetActiveObject("Excel.Applicatio…...
运行在华为云kubernetes应用接入APM服务
1 APM概述 在云时代微服务架构下应用日益丰富,纷杂的应用异常问题接踵而来。应用运维面临巨大挑战: 分布式应用关系错综复杂,应用性能问题分析定位困难,应用运维面临如何保障应用正常、快速完成问题定位、迅速找到性能瓶颈的挑战…...
虚幻引擎5-Unreal Engine笔记之摄像头camera
虚幻引擎5-Unreal Engine笔记之摄像头camera code review! 目录 第一部分:摄像头的基础概念 1.1 UE5 中摄像头的定义与作用1.2 UE5 中摄像头的类型与分类 第二部分:摄像头的代码结构与分类 2.1 摄像头是类还是组件?2.2 组件的本质ÿ…...
mysql的基础命令
1.SQL的基本概念 SQL 是用于管理和操作关系型数据库的标准编程语言。是所有关系型数据库(如 MySQL、PostgreSQL、Oracle 等)的通用语言。 SQL语句分类 DDL: Data Defination Language 数据定义语言 CREATE,DROP,ALTER DML: Da…...
去中心化算力池:基于IPFS+智能合约的跨校GPU资源共享平台设计
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、问题背景:高校算力孤岛的困境 现状痛点 各高校GPU集群利用率差异显著&…...
数据库(二):ORM技术
什么是 ORM? ORM(Object-Relational Mapping) 是一种用于实现 对象模型(面向对象)与关系模型(数据库)之间映射的技术,使程序员可以通过操作对象的方式访问数据库数据,而无…...
Oracle基础知识
目录 1.别名的使用 2.AND的优先级高于OR 3.where后面可以接别名,order by后面不可以 4.Oracle中SQL的执行顺序(重点) 5.dual万用表 6.是否区分大小写 7.Oracle常用数据类型 8.Oracle常用函数 (1)length字符、lengthb字节和cast强制类型转换 (2)数据类型转…...
使用 vite-plugin-dynamic-base 实现运行时动态设置上下文路径
我们一般会在编译之前设置上下文,那么如何在编译之后动态设置上下文的路径? 本文使用的技术栈是 Go(Gin) Vue.js(Vite) 本文使用到的第三方包:https://github.com/chenxch/vite-plugin-dynam…...
spark-shuffle 类型及其对比
1. Hash Shuffle 原理:将数据按照分区键进行哈希计算,将相同哈希值的数据发送到同一个Reducer中。特点:实现简单,适用于数据分布均匀的场景。但在数据分布不均匀时,容易导致某些Reducer处理的数据量过大,产…...
力扣-快乐数
1.题目要求 2.题目链接 202. 快乐数 - 力扣(LeetCode) 3.题目分析 首先,因为需要频繁地用到数字变为各个位上的平方的过程,我们可以将"对于一个正整数,每一次将该数替换为它每个位置的数字的平方和"这一操作抽象出来,定义成一个…...
每日算法刷题Day10 5.19:leetcode不定长滑动窗口求最长/最大4道题,结束定长滑动窗口,用时1h
不定长滑动窗口 不定长滑动窗口主要分为三类:求最长子数组,求最短子数组,以及求子数组个数。 注:滑动窗口相当于在维护一个队列。右指针的移动可以视作入队,左指针的移动可以视作出队。 滑动窗口【基础算法精讲 03】…...