news 2026/7/23 8:18:28

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 避免了覆盖问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 8:15:17

Unity Asset Bundle资源提取方案:解析引擎、依赖图谱与格式转换

1. 项目概述&#xff1a;为什么我们需要一个更好的Asset Bundle资源提取方案&#xff1f; 在Unity开发圈子里&#xff0c;Asset Bundle&#xff08;AB包&#xff09;是个让人又爱又恨的东西。爱它&#xff0c;是因为它几乎是所有商业化项目实现热更新、资源动态加载、控制包体大…

作者头像 李华
网站建设 2026/7/23 8:14:13

Git 与 GitHub 核心协作流:历史重写机制与标准 PR 实践

Git 与 GitHub 核心协作流&#xff1a;历史重写机制与标准 PR 实践 在日常开发与开源协作中&#xff0c;保持干净的提交历史和遵循官方的远程协作规范&#xff0c;是区分新手与成熟开发者的重要标志。本文将剖析 Git 本地修改追加机制与 GitHub 远程 Pull Request (PR) 的底层逻…

作者头像 李华
网站建设 2026/7/23 8:14:06

Unity AR Foundation实战指南:从零构建Spatial Joy 2025跨平台AR应用

1. 项目概述&#xff1a;在Spatial Joy 2025的AR赛道上&#xff0c;Unity AR Foundation为何是首选&#xff1f; 如果你正在关注Spatial Joy 2025&#xff0c;或者任何类似的XR创新赛事&#xff0c;你大概率已经听过Unity和AR Foundation这两个名字。但你可能还在犹豫&#xff…

作者头像 李华
网站建设 2026/7/23 8:13:53

AI实验室:科研工具链的智能化变革

1. 项目概述&#xff1a;AI实验室的诞生背景去年夏天我在Nature Methods上读到一篇论文&#xff0c;发现全球87%的生物学实验室仍在使用Excel处理实验数据。这个数字让我震惊——当AlphaFold已经能预测蛋白质结构时&#xff0c;我们的科研工具链居然还停留在电子表格时代。正是…

作者头像 李华