news 2026/8/12 17:23:32

Kimi LeetCode 3878. 统计好子数组 Rust实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kimi LeetCode 3878. 统计好子数组 Rust实现

LeetCode 3878. 统计好子数组 的 Rust 实现如下:

```rust
impl Solution {
pub fn count_good_subarrays(nums: Vec<i32>) -> i64 {
let n = nums.len();
let mut l = vec![-1i32; n];
let mut stk: Vec<usize> = Vec::new();

for i in 0..n {
let x = nums[i];
while let Some(&top) = stk.last() {
if nums[top] < x && (nums[top] | x) == x {
stk.pop();
} else {
break;
}
}
l[i] = stk.last().map(|&v| v as i32).unwrap_or(-1);
stk.push(i);
}

let mut r = vec![n as i32; n];
stk.clear();

for i in (0..n).rev() {
while let Some(&top) = stk.last() {
if (nums[top] | nums[i]) == nums[i] {
stk.pop();
} else {
break;
}
}
r[i] = stk.last().map(|&v| v as i32).unwrap_or(n as i32);
stk.push(i);
}

let mut ans: i64 = 0;
for i in 0..n {
ans += (i as i64 - l[i] as i64) * (r[i] as i64 - i as i64);
}
ans
}
}
```

思路说明

这道题的核心思路是 单调栈 + 枚举贡献:

题目定义:一个子数组是"好"的,当且仅当该子数组所有元素的 按位或(bitwise OR) 结果等于子数组中 至少出现一次 的元素。

关键观察:对于每个元素 `nums[i]`,如果它是某个子数组的按位或结果,那么该子数组中所有元素都必须是 `nums[i]` 的位运算子集,即满足 `nums[k] | nums[i] == nums[i]`。

算法步骤:

1. 找左边界 `l[i]`:从左到右遍历,用单调栈维护下标。对于 `nums[i]`,弹出所有满足 `nums[stk[-1]] < x` 且 `nums[stk[-1]] | x == x` 的元素(即被 `x` 包含的较小元素)。`l[i]` 就是栈顶元素(最后一个不满足条件的元素)。

2. 找右边界 `r[i]`:从右到左遍历,用单调栈维护下标。对于 `nums[i]`,弹出所有满足 `nums[stk[-1]] | nums[i] == nums[i]` 的元素(即被 `nums[i]` 包含的元素)。`r[i]` 就是栈顶元素(第一个不满足条件的元素)。

3. 计算贡献:以 `nums[i]` 为按位或结果的子数组数量为 `(i - l[i]) * (r[i] - i)`。

时间复杂度 `O(n)`,空间复杂度 `O(n)`。

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

Ubuntu24.04双系统安装实操

简介 前面做了那么多铺垫&#xff0c;接下来我们终于可以进行双系统的安装环节了&#xff0c;相信只要你看完了理论部分的内容&#xff0c;实操起来就没有什么问题了 理论介绍文章链接 工具软件 在安装双系统时我们肯定离不开对应的工具软件&#xff0c;我们在安装双系统时主…

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

房产下行周期中的闲置资产破局之道:商业拍卖重要性凸显

2026年&#xff0c;中国房地产市场仍在深度调整中。国家统计局数据显示&#xff0c;2026年1-5月&#xff0c;全国新建商品房销售面积、销售金额同比分别下降10.8%、13.5%&#xff1b;房地产开发投资同比下降16.2%。市场正从大规模增量扩张转向存量运营阶段&#xff0c;随着“盘…

作者头像 李华
网站建设 2026/8/12 17:22:29

建设学分银行网站策划书:打造终身学习数字枢纽的落地指南与深度解析

在这个知识迭代速度快得像翻书一样的时代,谁还在乎那一纸文凭的含金量?说实话,传统的教育模式正在经历一场巨大的洗牌。我们常常听到“终身学习”这个词,但真当你要去实现它的时候,你会发现困难重重。学历不连通、证书认不出、学习成果没法积累,这些痛点像是一座座大山,…

作者头像 李华
网站建设 2026/8/12 17:20:35

增长放缓、估值较低,Dropbox为何成私募股权投资理想目标?

Dropbox&#xff1a;研究中的纠结点有人一直在研究各类公司&#xff0c;阅读它们的 10 - K 报告等资料。在研究过程中&#xff0c;看到 Dropbox 时十分纠结。Drew Houston 是杰出创始人&#xff0c;Dropbox 的故事有诸多经验教训&#xff0c;比如史蒂夫乔布斯曾提出以 8 亿美元…

作者头像 李华
网站建设 2026/8/12 17:19:55

揭秘乐清市住房和城乡建设规划局网站如何助力市民便捷办事与城市更新政策解读

在这个数字化浪潮席卷全身的当下,我们生活在每一个普通人的日子里,似乎都在被各种各样的信息洪流推着往前走。特别是对于咱们乐清的老百姓来说,买房、装修、办证件这些事儿,曾经真是让人头大,跑断腿、磨破嘴的故事,老一辈人没少讲。但如今,时代变了,咱们的办事方式也在…

作者头像 李华