尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
DeepSeek    LeetCode 3830. 移除至多一个元素后的最长交替子数组 Rust实现
针对 LeetCode 3830“移除至多一个元素后的最长交替子数组”这里提供 Rust 实现采用 动态规划 (O(n) 时间, O(1) 空间)代码高效且安全。---核心思路维护 4 个状态以当前元素结尾· inc0最后一段比较为 上升 ()未删除元素· dec0最后一段比较为 下降 ()未删除元素· inc1最后一段比较为 上升已删除一个元素· dec1最后一段比较为 下降已删除一个元素每个状态初始为 1仅包含当前元素本身。转移遍历 i 从 1 到 n-11. 正常延续不删除 i-1· 若 nums[i] nums[i-1]inc0 dec0_prev 1inc1 dec1_prev 1· 若 nums[i] nums[i-1]dec0 inc0_prev 1dec1 inc1_prev 12. 删除 i-1使用一次删除机会需 i 2比较 nums[i] 与 nums[i-2]· 若 nums[i] nums[i-2]inc1 max(inc1, dec0_prev2 1)· 若 nums[i] nums[i-2]dec1 max(dec1, inc0_prev2 1)3. 每个状态至少为 1重新开始。---Rust 代码实现rustimpl Solution {pub fn longest_alternating(nums: Veci32) - i32 {let n nums.len();if n 0 {return 0;}if n 1 {return 1;}// 初始状态以 nums[0] 结尾let (mut inc0, mut dec0) (1, 1);let (mut inc1, mut dec1) (1, 1);let mut ans 1;// 保存 i-2 时的未删除状态初始不存在设为 0let (mut inc0_prev2, mut dec0_prev2) (0, 0);for i in 1..n {// 保存当前状态作为下一轮迭代的 prev2let (next_inc0, next_dec0) (inc0, dec0);// 保存上一轮状态prev1let (prev_inc0, prev_dec0) (inc0, dec0);let (prev_inc1, prev_dec1) (inc1, dec1);// 重置当前状态至少为 1inc0 1;dec0 1;inc1 1;dec1 1;// ---- 正常延续不删除 i-1 ----if nums[i] nums[i - 1] {inc0 inc0.max(prev_dec0 1);inc1 inc1.max(prev_dec1 1);} else if nums[i] nums[i - 1] {dec0 dec0.max(prev_inc0 1);dec1 dec1.max(prev_inc1 1);}// ---- 删除 i-1跳过中间元素 ----if i 2 {if nums[i] nums[i - 2] {inc1 inc1.max(dec0_prev2 1);} else if nums[i] nums[i - 2] {dec1 dec1.max(inc0_prev2 1);}}// 更新全局最大值ans ans.max(inc0).max(dec0).max(inc1).max(dec1);// 更新 i-2 状态为旧的 i-1 状态即本次迭代前的 inc0/dec0inc0_prev2 next_inc0;dec0_prev2 next_dec0;}ans as i32}}---复杂度分析· 时间复杂度O(n)单次遍历。· 空间复杂度O(1)仅使用常数个变量。---测试用例可自行添加rustfn main() {let sol Solution;assert_eq!(sol.longest_alternating(vec![1, 2, 3, 4]), 2);assert_eq!(sol.longest_alternating(vec![1, 3, 2, 4]), 4); // 不删除即满足assert_eq!(sol.longest_alternating(vec![1, 2, 1, 3, 2]), 5); // 删除一个元素后可达assert_eq!(sol.longest_alternating(vec![1, 1, 1]), 1);assert_eq!(sol.longest_alternating(vec![1, 2]), 2);}该实现直接对应 LeetCode 的 Rust 模板可直接提交使用。如需进一步解释欢迎追问
RELATED

相关推荐

DeepSeek    LeetCode 3830. 移除至多一个元素后的最长交替子数组 Python3实现

DeepSeek LeetCode 3830. 移除至多一个元素后的最长交替子数组 Python3实现

针对 LeetCode 3830“移除至多一个元素后的最长交替子数组”,这里提供两种 Python3 解法:动态规划 (O(n) 时间, O(1) 空间) 和前后缀分解 (O(n) 时间, O(n) 空间)。---解法一:动态规划(推荐)维护 4 个状态,…

📅 2026/8/22 18:35:05
AI技能化实战:从通用模型到专属工作流的构建指南

AI技能化实战:从通用模型到专属工作流的构建指南

1. 项目概述:从“裸奔”到“武装”的AI进化论最近和不少同行交流,发现一个挺普遍的现象:大家手里都握着几个强大的AI模型,比如GPT-4、Claude 3,或者开源的Llama、Qwen,但用起来总觉得差点意思。要么是让它写…

📅 2026/8/22 18:35:06
深入理解Python中的类方法、类实例方法和静态方法

深入理解Python中的类方法、类实例方法和静态方法

在于其中, 属于类的方法, 以及类实例所拥有的方法, 还有静态存在的方法, 是面向对象编程里极为重要的概念。它们各自分别有着不一样的特性, 以及不同的用途, 正确地去使用它们, 能够提升代码的可读性, 以及变得更加灵活。1. 类方法(Class )1.1. 什么是类…

📅 2026/8/22 18:35:06
MORE NEWS

更多资讯

📰

* LangChain 模型统一接入:ChatOpenAI 兼容用法与 init_chat_model 详解

本章对应的官网文档出处: 英文文档:https://docs.langchain.com/oss/python/langchain/models 中文文档:https://docs.langchain.org.cn/oss/python/langchain/models 一、ChatOpenAI 兼容用法 1.1 兼容接口的使用背景 一方面&#xff0…

📰

Atlas 300V 24G上部署YOLO:模型转换与推理调优实战

1. Atlas 300V 24G:先把这个"是不是加速卡"的问题彻底讲清楚1.1 为什么大家会对这张卡产生身份疑问最近后台收到好几条类似的私信,都是关于"Atlas 300V 24G",上来第一句就问:这玩意儿是运算加速卡吗&#xff…

📰

链表从入门到精通:单链表操作、逆序与面试考点全解析

聊链表之前,我先说个观察:数据结构课上,链表几乎是所有人的第一道坎,但也是性价比最高的一道坎。学会了链表,指针、内存、递归这些概念会跟着通掉一半;学不会,后面二叉树、图、哈希表全都会受影…

📰

Servlet+JSP手写登录注册:从环境搭建到Session会话管理

1. 为什么还要写ServletJSP的登录注册:先弄清楚这个项目解决什么问题登录注册系统,几乎是每个JavaWeb学习者绕不开的第一个完整项目。哪怕现在Spring Boot大行其道,我还是建议你耐着性子把它用原生Servlet和JSP写一遍。原因很简单&#xff1a…

📰

从推理到构建:腾讯云ES如何让企业Agent从「能用」走向「好用」

导读:当 16% 的企业已把 Agentic AI 推进生产环境、而真正拥有 AI-Ready 数据的企业只有 4% 时,热度与落地之间的这道缺口,并不是大模型能力的缺口,而是上下文供给的缺口。在 腾讯云 x Elastic AI 搜索技术大会上,腾讯…

📰

PL/SQL Developer免Oracle客户端实战配置指南

简介:PLSQL Developer是一款专为Oracle数据库设计的集成开发环境,这份免安装版本省去了完整Oracle客户端的部署步骤,解压即可运行,适合追求轻量化环境的数据库开发、运维及测试人员,也适合在受限网络或快速交付场景下使…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬