# 代码随想录算法训练营Day37 | Leetcode300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
代码随想录算法训练营Day37 | Leetcode300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
一、最长递增子序列
相关题目:Leetcode300
文档讲解:Leetcode300
视频讲解:Leetcode300
1. Leetcode300.最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
提示:
- 1 <= nums.length <= 2500
- -104 <= nums[i] <= 104
-
思路:
- 动规五部曲:
- 确定 dp 数组以及下标的含义:dp[i] 表示 i 前包括 i 的以 nums[i] 结尾的最长递增子序列的长度。定义以 nums[i] 结尾是因为做递增比较的时候,如果比较 nums[j] 和 nums[i] 的大小,那么两个递增子序列一定分别以 nums[j] 和 nums[i] 为结尾, 不是尾部元素的比较难以算递增。
- 状态转移方程:位置 i 的最长升序子序列等于 j 从 0 到 i-1 各个位置的最长升序子序列 + 1 的最大值。所以:if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1)。
- dp[i] 的初始化:对每一个 i,对应的 dp[i](即最长递增子序列)起始大小至少都是 1。
- 确定遍历顺序:dp[i] 是由 0 到 i-1 各个位置的最长递增子序列 推导而来,那么遍历 i 一定是从前向后遍历。j 只要把 0 到 i-1 的元素都遍历了就行,无论是从前到后还是从后到前遍历都可以(默认从前向后遍历)。
- 举例推导 dp 数组:输入:[0,1,0,3,2],dp 数组的变化如下:
- 动规五部曲:
-
动规
class Solution:def lengthOfLIS(self, nums: List[int]) -> int:if len(nums) <= 1:return len(nums)dp = [1] * len(nums)result = 1for i in range(1, len(nums)):for j in range(0, i):if nums[i] > nums[j]:dp[i] = max(dp[i], dp[j] + 1)result = max(result, dp[i]) #取长的子序列return result
二、最长连续递增序列
相关题目:Leetcode674
文档讲解:Leetcode674
视频讲解:Leetcode674
1. Leetcode674.最长连续递增序列
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。
提示:
- 1 <= nums.length <= 104
- -109 <= nums[i] <= 109
- 思路:
- 动规五部曲:
- 确定 dp 数组以及下标的含义:dp[i] 表示以下标 i 为结尾的连续递增的子序列长度为 dp[i]。(以下标 i 为结尾,并不是说一定以下标 0 为起始位置)
- 确定递推公式:如果 nums[i] > nums[i - 1],那么以 i 为结尾的连续递增的子序列长度 一定等于以 i - 1 为结尾的连续递增的子序列长度 + 1 ,所以 dp[i] = dp[i - 1] + 1。
- dp 数组如何初始化:以下标 i 为结尾的连续递增的子序列长度最少也应该是 1,即 nums[i] 这一个元素。所以 dp[i] 皆应初始为 1。
- 确定遍历顺序:从递推公式可以看出 dp[i + 1] 依赖 dp[i],所以一定是从前向后遍历。
- 举例推导 dp 数组:以输入 nums = [1,3,5,4,7] 为例,dp 数组状态如下:
- 动规五部曲:
- 注意:
- 与 Leetcode300.最长递增子序列 不同,本题要求连续递增子序列,所以就只要比较 nums[i] 与 nums[i - 1],而不需比较 nums[j] 与 nums[i] (j 在 0 到 i 之间遍历)。
- 与 Leetcode300.最长递增子序列 不同,本题要求连续递增子序列,所以就只要比较 nums[i] 与 nums[i - 1],而不需比较 nums[j] 与 nums[i] (j 在 0 到 i 之间遍历)。
- 动规
###DP
class Solution:def findLengthOfLCIS(self, nums: List[int]) -> int:if len(nums) == 0:return 0result = 1dp = [1] * len(nums)for i in range(len(nums)-1):if nums[i+1] > nums[i]: #连续记录dp[i+1] = dp[i] + 1result = max(result, dp[i+1])return result###DP(优化版)
class Solution:def findLengthOfLCIS(self, nums: List[int]) -> int:if not nums:return 0max_length = 1current_length = 1for i in range(1, len(nums)):if nums[i] > nums[i - 1]:current_length += 1max_length = max(max_length, current_length)else:current_length = 1return max_length
- 贪心
class Solution:def findLengthOfLCIS(self, nums: List[int]) -> int:if len(nums) == 0:return 0result = 1 #连续子序列最少也是1count = 1for i in range(len(nums)-1):if nums[i+1] > nums[i]: #连续记录count += 1else: #不连续,count从头开始count = 1result = max(result, count)return result
三、最长重复子数组
相关题目:Leetcode718
文档讲解:Leetcode718
视频讲解:Leetcode718
1. Leetcode718.最长重复子数组
给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。
提示:
- 1 <= nums1.length, nums2.length <= 1000
- 0 <= nums1[i], nums2[i] <= 100
- 思路:
- 题目中说的子数组其实就是连续子序列。要求两个数组中最长重复子数组,如果是暴力的解法需要先两层 for 循环确定两个数组起始位置,然后再来一个循环可以是 for 或者 while,来从两个起始位置开始比较,取得重复子数组的长度。如果利用动态规划,利用二维数组可以记录两个字符串的所有比较情况。
- 动规五部曲:
- 确定 dp 数组以及下标的含义:dp[i][j] 表示以下标 i - 1 为结尾的 A,和以下标 j - 1 为结尾的 B,最长重复子数组长度为 dp[i][j]。
- 确定递推公式:根据 dp[i][j] 的定义,dp[i][j] 的状态只能由 dp[i - 1][j - 1] 推导出来。即当 A[i - 1] 和 B[j - 1] 相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1。
- dp 数组如何初始化:根据 dp[i][j] 的定义,dp[i][0] 和 dp[0][j] 没有意义,但 dp[i][0] 和 dp[0][j] 要初始值,为了方便递归公式 dp[i][j] = dp[i - 1][j - 1] + 1,所以 dp[i][0] 和 dp[0][j] 初始化为 0。例:如果 A[0] 和 B[0] 相同的话,dp[1][1] = dp[0][0] + 1,只有 dp[0][0] 初始为 0,正好符合递推公式逐步累加起来。
- 确定遍历顺序:外层 for 循环遍历 A,内层 for 循环遍历 B 或是 外层 for 循环遍历 B,内层 for 循环遍历 A 都可以。
- 举例推导 dp 数组:以 A: [1,2,3,2,1],B: [3,2,1,4,7] 为例,dp 数组的状态变化如下:
- 注意:
- 前述 dp[i][j] 的定义决定着在遍历 dp[i][j] 的时候 i 和 j 都要从1开始。
- 定义 dp[i][j] 为以下标 i 为结尾的 A,和以下标 j 为结尾的 B,最长重复子数组长度也是可行的,但需要单独处理初始化部分:
- 第一行和第一列需要进行初始化,如果 nums1[i] 与 nums2[0] 相同的话,对应的 dp[i][0] 要初始为 1, 因为此时最长重复子数组为 1;nums2[j] 与 nums1[0] 相同的话,同理。
- 利用滚动数组(一维 dp):可以看出 dp[i][j] 都是由 dp[i - 1][j - 1] 推出,那么压缩可以一维数组,也就是 dp[j] 都是由 dp[j - 1] 推出。相当于可以把上一层 dp[i - 1][j] 拷贝到下一层 dp[i][j] 来继续用。此时遍历 B 数组的时候,就要从后向前遍历,避免重复覆盖。例(同上):
- 二维 dp
###2维DP
class Solution:def findLength(self, nums1: List[int], nums2: List[int]) -> int:# 创建一个二维数组 dp,用于存储最长公共子数组的长度dp = [[0] * (len(nums2) + 1) for _ in range(len(nums1) + 1)]# 记录最长公共子数组的长度result = 0# 遍历数组 nums1for i in range(1, len(nums1) + 1):# 遍历数组 nums2for j in range(1, len(nums2) + 1):# 如果 nums1[i-1] 和 nums2[j-1] 相等if nums1[i - 1] == nums2[j - 1]:# 在当前位置上的最长公共子数组长度为前一个位置上的长度加一dp[i][j] = dp[i - 1][j - 1] + 1# 更新最长公共子数组的长度if dp[i][j] > result:result = dp[i][j]# 返回最长公共子数组的长度return result###2维DP 扩展
class Solution:def findLength(self, nums1: List[int], nums2: List[int]) -> int:# 创建一个二维数组 dp,用于存储最长公共子数组的长度dp = [[0] * (len(nums2) + 1) for _ in range(len(nums1) + 1)]# 记录最长公共子数组的长度result = 0# 对第一行和第一列进行初始化for i in range(len(nums1)):if nums1[i] == nums2[0]:dp[i + 1][1] = 1for j in range(len(nums2)):if nums1[0] == nums2[j]:dp[1][j + 1] = 1# 填充dp数组for i in range(1, len(nums1) + 1):for j in range(1, len(nums2) + 1):if nums1[i - 1] == nums2[j - 1]:# 如果 nums1[i-1] 和 nums2[j-1] 相等,则当前位置的最长公共子数组长度为左上角位置的值加一dp[i][j] = dp[i - 1][j - 1] + 1if dp[i][j] > result:# 更新最长公共子数组的长度result = dp[i][j]# 返回最长公共子数组的长度return result
- 一维 dp
class Solution:def findLength(self, nums1: List[int], nums2: List[int]) -> int:# 创建一个一维数组 dp,用于存储最长公共子数组的长度dp = [0] * (len(nums2) + 1)# 记录最长公共子数组的长度result = 0# 遍历数组 nums1for i in range(1, len(nums1) + 1):# 用于保存上一个位置的值prev = 0# 遍历数组 nums2for j in range(1, len(nums2) + 1):# 保存当前位置的值,因为会在后面被更新current = dp[j]# 如果 nums1[i-1] 和 nums2[j-1] 相等if nums1[i - 1] == nums2[j - 1]:# 在当前位置上的最长公共子数组长度为上一个位置的长度加一dp[j] = prev + 1# 更新最长公共子数组的长度if dp[j] > result:result = dp[j]else:# 如果不相等,将当前位置的值置为零dp[j] = 0# 更新 prev 变量为当前位置的值,供下一次迭代使用prev = current# 返回最长公共子数组的长度return result
相关文章:
# 代码随想录算法训练营Day37 | Leetcode300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
代码随想录算法训练营Day37 | Leetcode300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组 一、最长递增子序列 相关题目:Leetcode300 文档讲解:Leetcode300 视频讲解:Leetcode300 1. Leetcode300.最长递增子序列 给你一个整数数…...
中小企业技术跃迁:云原生后端如何实现高效低成本系统建设
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:技术变革的“门槛”能否被跨越? 过去十年,云计算与容器化技术飞速发展,互联网巨头纷纷构建自己的云原生基础设施,实现系统模块化、弹性伸缩、自动化运维。然而,中小企业在这股浪潮中…...
系统架构师2025年论文《系统架构风格2》
论软件系统架构风格 摘要: 某市医院预约挂号系统建设推广应用项目是我市卫生健康委员会 2019 年发起的一项医疗卫生行业信息化项目,目的是实现辖区内患者在辖区各公立医疗机构就诊时,可以通过多种线上渠道进行预约挂号。我作为系统架构师参与此项目。本文围绕软件系统架构…...
Java面试实战:电商场景下的Spring Cloud微服务架构与缓存技术剖析
第一轮提问 面试官: 谢飞机,我们先从基础问题开始。请问你知道Spring Boot和Spring Cloud的区别吗? 谢飞机: 当然知道!Spring Boot主要用于快速构建独立运行的Spring应用,而Spring Cloud则是在Spring Boot的基础上实现分布式系统…...
快速配置linux远程开发-go语言
1.go安装包安装 2.go env 配置 go env -w GO111MODULEon go env -w GOPROXYxx go env -w GOSUMDBoff go env -w GOPRIVATExx 3.复制linux公钥到gitlab中,用于通过ssh免密拉取gitlab项目 ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 4.设置…...
C++23文本编码革新:迈向更现代的字符处理
文章目录 一、字符集与编码(P2314R4)二、统一的字符字面量编码(P2316R2)三、具名通用字符转义(P2071R2)四、带分隔的转义序列(P2290R3)五、支持UTF-8作为可移植源文件编码࿰…...
CentOS系统中MySQL安装步骤分享
在 CentOS 系统上安装 MySQL,需要依次进行环境检查、软件源配置、安装 MySQL、启动服务等操作。我将按照规范流程,为你详细分享完整且具体的安装步骤。 在 CentOS 系统中安装 MySQL 数据库,能够为各类应用提供高效稳定的数据存储和管理服务。…...
【产品经理从0到1】Axure介绍
01. 上期内容回顾 创建元件库的时候,在添加原件时不知道怎么操作。讲解很耐心,希望课上分解步骤多带着练习下;PC 端的原型,相对于移动端,非常自由,没有任何的设计规范;但是,要求 PC…...
30天通过软考高项-第二天
30天通过软考高项-第二天 任务:项目立项管理、项目整合管理 思维导图阅读 知识点记忆 章节习题练习 知识点练习 手写回忆ITTO 立项管理-背 1. 项目可研的5个方面 基金社运法 技术可行性、经济可行性、社会效益可行性、运行环境可行性、其他(法律、政…...
yt-dlp 下载时需要 cookie
下载 b 站 歌曲 yt-dlp -x --proxy http://127.0.0.1:1080 --audio-format mp3 https://www.bilibili.com/video/BV1Zn4y1X75b解决方案,使用 firefox 登录相关网站 yt-dlp -o "downloads/%(title)s.%(ext)s" -f "bestvideo[height<1080]bestaud…...
快速上手GO的net/http包,个人学习笔记
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 针对GO中net/http包的学习笔记 基础快速了解 创建简单的GOHTTP服务 func …...
Flask + ajax上传文件(二)--多文件上传
Flask多文件上传完整教程 本教程将详细介绍如何使用Flask实现多文件上传功能,并使用时间戳为上传文件自动命名,避免文件名冲突。 一、环境准备 确保已安装Python和Flask pip install flask项目结构 flask_upload/ ├── app.py ├── upload/ # 上传文…...
sysstat介绍以及交叉编译
文章目录 1. 工具集介绍2. 指令使用参考3. 交叉编译3.1 源码下载3.2 编译步骤 4. 工具验证4.1 将相关工具导入到设备4.2 功能验证 1. 工具集介绍 Sysstat 是一个功能强大的 Linux 系统性能监控工具包,提供实时监控和历史数据分析功能,帮助管理员优化系统…...
常见正则表达式整理与Java使用正则表达式的例子
一、常见正则表达式整理 1. 基础验证类 邮箱地址 ^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\\.[a-zA-Z]{2,}$ (匹配如 userexample.com)手机号 ^1[3-9]\\\\d{9}$ (匹配国内11位手机号,如 13812345678)中文字符 ^[\u4e00-\u9fa5…...
UE5 Assimp 自用
记录一下配assimp库到ue中的过程。因为想在ue里面实现一些几何处理(虽然ue好像有相关的geo的代码),遂配置了一下assimp。 1. 编译整理生成自己所需要的文件。cmake编译,下载github 的官方的assimp-master,然后cmake都是默认的就行…...
java—12 kafka
目录 一、消息队列的优缺点 二、常用MQ 1. Kafka 2. RocketMQ 3. RabbitMQ 4. ActiveMQ 5. ZeroMQ 6. MQ选型对比 适用场景——从公司基础建设力量角度出发 适用场景——从业务场景角度出发 四、基本概念和操作 1. kafka常用术语 2. kafka常用指令 3. 单播消息&a…...
VS Code 智能代理模式:重塑开发体验
在编程领域,效率与精准度无疑是开发者们永恒的追求。而如今,VS Code 推出的智能代理模式(Agent Mode),正以前所未有的方式,彻底颠覆了传统开发流程,为程序员们带来了一场前所未有的效率革命。本…...
基于深度学习和单目测距的前车防撞及车道偏离预警系统
随着人工智能与计算机视觉技术的飞速发展,高级驾驶辅助系统(ADAS)已成为现代汽车智能化的关键标志。它不仅能有效提升行车安全,还能为自动驾驶时代的全面到来奠定坚实基础。本文深入剖析一套功能完备、基于深度学习模型的 ADAS 系统的架构与核心实现,带您领略智能驾驶背后…...
第二篇:Django配置及ORM操作
第二篇:Django配置及ORM操作 文章目录 第二篇:Django配置及ORM操作一、静态文件配置1、为什么要配置静态文件?2、如何配置静态文件?3、静态文件动态解析4、form表单默认是get请求数据 二、request对象方法初识三、pycharm链接数据…...
亚马逊英国站FBA费用重构:轻小商品迎红利期,跨境卖家如何抢占先机?
一、政策背景:成本优化成平台与卖家共同诉求 2024年4月,亚马逊英国站(Amazon.co.uk)发布近三年来力度最大的FBA费用调整方案,标志着英国电商市场正式进入精细化成本管理时代。这一决策背后,是多重因素的叠…...
算法时代的“摩西十诫”:AI治理平台重构数字戒律
一、引言 数字时代的狂飙突进中,人工智能(AI)正以颠覆性的力量重塑人类社会。从医疗诊断到金融决策,从智能制造到舆论传播,AI的触角已延伸至每个角落。 然而,斯坦福大学《2024年人工智能指数报告》揭示的…...
Kafka的ISR机制是什么?如何保证数据一致性?
一、Kafka ISR机制深度解析 1. ISR机制定义 ISR(In-Sync Replicas)是Kafka保证数据一致性的核心机制,由Leader副本(复杂读写)和Follower副本(负责备份)组成。当Follower副本的延迟超过replica.lag.time.max.ms&#…...
Flink 消费 Kafka 数据流的最佳实践
一、前言:Kafka 只是开始,消费才是关键 Kafka 提供了优雅的 Topic 管理与消息缓冲机制,但只有当 Flink 能稳定、有序、无数据丢失地消费并处理这些数据流,实时数仓系统才真正发挥作用。 本篇将围绕 Flink 如何“吃好” Kafka 数据…...
UEC++第10天|UEC++获取对象、RTTI是C++
最近在写UEC项目,这里写几个案例里的问题,还在学习阶段 1. 如何获取小鸟对象? void AFlappyBirdGameModeBase::BeginGame() { // 让管道动起来PipeActor->SetMoveSpeed();// 让小鸟开始飞行// 如何获取到小鸟对象APawn* Pawn UGameplayS…...
原生微信小程序,canvas生成凭证,保存到手机
原生微信小程序通过canvas可以将表单( 文本、图片 )转化成图片,同时添加水印,生成凭证,这里只是基本功能实现。可以继续完善和扩展。 <view class"container"><!-- Canvas 组件 --><canvas type"2d" id&…...
如何轻松将 Python 英文版切换至中文界面
Python 是一种广泛使用的编程语言,尤其在数据科学、人工智能和网络开发等领域。在最近的 Python 版本中,用户可以方便地使用多种语言,这也包括将 Python 界面语言从英文切换至中文。这不仅是出于用户体验的考虑,也能帮助初学者更快…...
2025.04.24【3D】3D绘图入门指南
Nifty graph A contribution by Matt Asher. 3D animation A 3D animated scatterplot made with R and rgl. 文章目录 Nifty graph3D animation 2025.04.24【3D】| 3D绘图入门指南什么是3D绘图?为什么使用3D绘图?如何在R中进行3D绘图?安装…...
R-CNN,Fast-R-CNN-Faster-R-CNN个人笔记
注:此博客主要为了方便笔者快速复习,只讲大致框架,只讲推理,不讲训练,因此内容不会很详实。 1.R-CNN R-CNN系列的开山之作。 本文将该框架划分为3个模块: 1.region proposal generator 2.CNN(…...
【深度学习核心技术解析】从理论到实践的全链路指南
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现(MNIST分类)运行结果验证 三、性能对比测试方法论量化数据对比结果分析 四…...
【QT网络】构建简单Udp回显服务器
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
浅谈国产数据库多租户方案:提升云计算与SaaS的资源管理效率
近年来,“数据库多租户”这一概念在技术圈内频频出现,成为云计算和SaaS(软件即服务)架构中的重要组成部分。多租户架构不仅为企业提供了高效的资源隔离与共享解决方案,还能大幅降低成本,提高系统的可扩展性…...
【霍夫变换】图像处理(OpenCV)-part11
20 霍夫变换 20.1 理解霍夫变换 霍夫变换的基本思想是将图像空间中的几何元素(如直线、圆等)通过参数方程转换到参数空间中,形成一个参数空间的累加器数组。图像空间中的每个点在参数空间中对应一个曲线或曲面,而几何形状在图像…...
Flink 源码编译
打包命令 打包整个项目 mvn clean package -DskipTests -Drat.skiptrue打包单个模块 mvn clean package -DskipTests -Drat.skiptrue -pl flink-dist如果该模块依赖其他模块,可能需要先将其他模块 install 到本地,如果依赖的模块的源代码有修改&#…...
React19源码阅读之commitRoot
commitRoot入口 在finishConcurrentRender函数,commitRootWhenReady函数,commitRoot函数。 commitRoot流程图 commitRoot函数 commitRoot 函数是 React 渲染流程中用于提交根节点的关键函数。它的主要作用是设置相关的优先级和状态,然后调…...
单 例 模 式
设计模式(Design Pattern)说白了就是一套方法论,是我们的前辈们不断试错总结出来的。一般意义上的设计模式有23种,分为创建型、结构型、行为型三大类。今天先拿最简单的单例模式开刀吧。 六大原则 在正式进入设计模式的学习之前&…...
如何在 Postman 中,自动获取 Token 并将其赋值到环境变量
在 Postman 中,你可以通过 预请求脚本(Pre-request Script) 和 测试脚本(Tests) 实现自动获取 Token 并将其赋值到环境变量,下面是完整的操作步骤: ✅ 一、创建获取 Token 的请求 通常这个请求…...
CentOS 7 基于 Nginx 的 HTML 部署全流程指南
一、Nginx 安装(两种主流方式) 1. YUM 安装(推荐新手) # 安装 EPEL 扩展源(部分系统需要) yum install epel-release -y# 安装 Nginx yum install nginx -y# 启动并设置开机自启 systemctl start nginx s…...
spring-ai使用Document存储至milvus的数据结构
1、 spring:application:name: spring-ai-alibaba-rag-milvus-exampleai:dashscope:api-key: sk-xxxxxxoooooovectorstore:milvus:client:host: xxx.ooo.mmm.nnnport: 19530username: rootpassword: MilvusdatabaseName: defaultcollectionName: vector_store#初始化 collecti…...
Milvus(6):Collection 管理分区、管理别名
1 管理分区 分区是一个 Collection 的子集。每个分区与其父集合共享相同的数据结构,但只包含集合中的一个数据子集。本页将帮助你了解如何管理分区。 1.1 分区概述 创建一个 Collection 时,Milvus 也会在该 Collection 中创建一个名为_default 的分区。…...
关于Safari浏览器在ios<16.3版本不支持正则表达式零宽断言的解决办法
异常原因 今天在升级Dify版本的时候发现低版本的ios手机出现了以下报错: SyntaxError: Invalid regular expression: invalid group specifier nameError: Invalid regular expression: invalid group specifier name Call Stack 46 eval [native code] (0:0) ./n…...
设计模式--建造者模式详解
建造者模式 建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式 定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示(假设有不同的建造者实现类,可以产生不同的产品)…...
玩转Docker | Docker部署LMS轻量级音乐工具
玩转Docker | Docker部署LMS轻量级音乐工具 前言一、LMS介绍LMS简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署LMS服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问LMS服务访问LMS首页注册账号五、基本使用上传音乐文…...
【前端】【业务场景】【面试】在前端项目中,当涉及大量数据渲染时,如何提高渲染性能并避免页面卡顿?
大量数据渲染性能优化:四层进阶法 循序渐进:先限量 → 再懒渲 → 后分批 → 终极后台协作 1 虚拟滚动:一次只保留“看得见”的节点 核心思路:固定容器高度,让滚动条滚动 假象 的总长度;可视窗口内…...
数据结构与算法实战:从理论到落地的深度探索
放在前面咯 数据结构与算法实战:从理论到落地的深度探索 数据结构与算法实战:从理论到落地的深度探索 在计算机科学的浩瀚宇宙中,数据结构与算法犹如璀璨星辰,指引着高效程序设计的方向。它们不仅是开发者解决复杂问题的核心利…...
大文件上传Demo及面试要点
大文件上传功能实现原理 - 面试解析 在面试中解释大文件上传功能的实现原理时,可以从以下几个方面进行说明: 1. 分片上传 (Chunked Upload) 实现原理 : 前端将大文件分割为固定大小(如5MB)的多个分片(Chunk)每个分片独立上传,…...
安宝特案例 | 物流仓储头部企业应用AR+作业流,规范日常安全点检,保障消防安全
安全点检管理的真实性缺失将会造成极大损失。 仓储物流行业有仓库面积大、货物堆放密集、包装材料易燃、整体货值高的特点,且造成火灾的隐患包括建筑结构隐患、消防设置失效、货物存放与操作隐患、电气系统问题、人为因素等,因此安全管理被放在重要位置…...
关于 xpath 查找 XML 元素的一点总结
测试环境 Win7 64 python 3.4.0 实践出真知 代码如下,更换不同的 xpath,和 response_to_check 进行测试 实验 1 xpath ".//xmlns:return//xmlns:copeWith" response_to_check \ <soap:Envelope xmlns"http://www.examp.com…...
JavaScript学习教程,从入门到精通,XMLHttpRequest 与 Ajax 请求详解(25)
XMLHttpRequest 与 Ajax 请求详解 一、XMLHttpRequest 概述 XMLHttpRequest (XHR) 是一个 JavaScript API,用于在浏览器和服务器之间传输数据,而无需刷新页面。它是实现 Ajax (Asynchronous JavaScript and XML) 技术的核心。 主要特点: …...
HTML、XHTML 和 XML区别
HTML、XHTML 和 XML 这三兄弟的区别 HTML: 老大哥,负责网页长啥样,性格比较随和,有点小错误也能容忍。XHTML: 二哥,看着像 HTML,但规矩严,是按 XML 的规矩来的 HTML,更规范。XML: 小弟…...
形象解释 HTTP 的四种常见请求方式及其中的区别联系
HTTP 的常见请求方式常见的有四种:GET、POST、PUT、DELETE,它们各自的功能不一样。 🍜 场景比喻:HTTP 请求像“去餐厅点菜” 请求方式行为餐厅比喻说明GET获取数据看菜单/问服务员:你们有什么菜?不带食材、…...