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

DeepSeek LeetCode 3686. 稳定子序列的数量 C++实现

这道题的难点在于,当我们逐个处理元素时,只要知道当前稳定子序列最后两个元素的奇偶性,就能判断能否追加新的元素。因此可以用状态机 DP,只需维护 4 个状态。

```cpp
class Solution {
public:
int countStableSubsequences(vector<int>& nums) {
const int MOD = 1e9 + 7;
// 状态定义:
// f[0][0]: 以偶数结尾,且末尾连续偶数长度为1
// f[0][1]: 以偶数结尾,且末尾连续偶数长度为2
// f[1][0]: 以奇数结尾,且末尾连续奇数长度为1
// f[1][1]: 以奇数结尾,且末尾连续奇数长度为2
long long f[2][2] = {};

for (int x : nums) {
int p = x & 1; // 当前元素奇偶性,0偶1奇
int q = p ^ 1; // 相反奇偶性

// 追加到末尾为 q 的子序列后面(奇偶性不同,新连续段长度为1)
long long addToDiff = (f[q][0] + f[q][1]) % MOD;
// 当前元素单独成为一个子序列
long long alone = 1;
// 新的“末尾连续长度为1”的状态
long long newLen1 = (f[p][0] + addToDiff + alone) % MOD;
// 新的“末尾连续长度为2”的状态(只能追加到末尾连续长度为1的同奇偶性子序列后)
long long newLen2 = (f[p][1] + f[p][0]) % MOD;

// 更新状态
f[p][0] = newLen1;
f[p][1] = newLen2;
}

return (f[0][0] + f[0][1] + f[1][0] + f[1][1]) % MOD;
}
};
```

⚙️ 核心思路:状态机 DP

根据“稳定”的定义,任何合法子序列的末尾,只可能是1个或2个连续相同奇偶性的元素。我们用 4 个变量记录这 4 种状态的数量。

处理每个数时,分情况更新:

· 当前元素单独成序列:产生 1 个新序列。
· 追加到末尾奇偶性不同的序列:末尾变成1个新元素,这部分数量直接累加。
· 追加到末尾奇偶性相同的序列:只能追加上一步末尾连续长度为 1 的序列,使其长度变为 2。

你给出的示例 nums = [1,3,5] 全是奇数,执行过程如下:

· 处理 1:得到 [1],f[1][0]=1
· 处理 3:得到 [3]、追加得到 [1,3],f[1][0]=2, f[1][1]=1
· 处理 5:得到 [5],追加得到 [1,5], [3,5],长度2状态得到 [1,3,5]? 不会,因为无法从长度2状态追加。最终总数=6。

按顺序更新状态时,需使用旧值计算,C++ 代码中通过临时变量 newLen1、newLen2 避免了覆盖问题。

http://www.cnnetsun.cn/news/3597634.html

相关文章:

  • 视频太长看不完?用AI自动转写逐字稿+要点总结+思维导图,5分钟看完2小时视频
  • 多平台电商订单集成的技术架构选型:如何评估聚合接口的稳定性与数据安全
  • Unity Asset Bundle资源提取方案:解析引擎、依赖图谱与格式转换
  • Git 与 GitHub 核心协作流:历史重写机制与标准 PR 实践
  • Unity AR Foundation实战指南:从零构建Spatial Joy 2025跨平台AR应用
  • AI实验室:科研工具链的智能化变革
  • C++异常处理性能深度剖析:从原理到实践的性能优化指南
  • 深入解析TI DCAN模块:中断、电源与错误处理三大核心机制
  • C/C++自动化交互编程:Expect库核心原理与实战应用
  • LTP测试套件在虚拟化环境中的应用与优化
  • C++面向对象项目实战:从零构建控制台ATM模拟器
  • Hyprland:高度可定制的 Wayland 合成器,带来更优用户体验!
  • 极简架构降载技术|从西班牙红薯饭去繁就简,解析反向海淘系统轻量化架构优化方案
  • C++实战:URL编码解码原理与工业级实现详解
  • Nginx集成ModSecurity 3.0构建WAF:从编译部署到规则定制实战
  • 前端状态管理库在AI聊天应用中的适用性对比:Zustand、Jotai与Valtio
  • 学习打卡与成就系统的微交互设计:仪式感与持续激励的平衡
  • 半导体课程AI配音系统:本地部署与API接口实战指南
  • 时空数据库与向量检索融合技术解析与应用
  • OEXN:“白银升势映射避险需求”
  • TM4C123定时器B配置详解:从GPTMTBMR寄存器到PWM与中断实战
  • Minecraft Optifine模组:性能优化与画质增强全指南
  • 视频平台的数据库设计:从用户体系到弹幕系统的Schema架构复盘
  • Android Studio医院挂号系统毕设开发指南
  • 上下文工程:提升AI对话连贯性与计算效率的关键技术
  • AI训练数据准备:用OpenClaw自动化下载海量图片,如何搭配隧道防封?
  • C++高性能图像处理库ximage:轻量级替代OpenCV的设计与实现
  • 探索密封胶新选择:单组分硅酮免垫密封胶哪家更值得信赖?
  • Selenium屏幕截图全攻略:从基础实现到工程化集成
  • 西门子S7-200 SMART编程软件安装与配置全攻略