网易首页 > 网易号 > 正文 申请入驻

2026-07-13:统计好子数组。用go语言,给定一个整数数组 nums。 对任意一个连续非空的子数组,考察它里面所有元素的按位或值(把该子数组

0
分享至

2026-07-13:统计好子数组。用go语言,给定一个整数数组 nums。

对任意一个连续非空的子数组,考察它里面所有元素的按位或值(把该子数组中每个元素依次做按位或,最终得到一个结果)。

如果这个按位或结果在该子数组中“至少出现过一次”(也就是子数组里存在某个元素的值,等于这个按位或结果),那么称这个子数组为“好子数组”。

请统计 nums 中所有好子数组的数量,并返回这个总数。

1 <= nums.length <= 100000。

0 <= nums[i] <= 1000000000。

输入: nums = [4,2,3]。

输出: 4。

解释:

nums 的子数组有:

子数组

按位或结果

存在于子数组中

4 = 4

2 = 2

3 = 3

[4, 2]

4 | 2 = 6

[2, 3]

2 | 3 = 3

[4, 2, 3]

4 | 2 | 3 = 7

因此,nums 的好子数组是 [4]、[2]、[3] 和 [2, 3]。所以答案为 4。

题目来自力扣3878。

大体步骤如下:Go完整代码如下:

package main

import (
"fmt"
)

func countGoodSubarrays(nums []int) (ans int64) {
n := len(nums)
left := make([]int, n)
st := []int{-1} // 哨兵
for i, x := range nums {
forlen(st) > 1 && nums[st[len(st)-1]]|x == x {
st = st[:len(st)-1]
}
left[i] = st[len(st)-1] // nums[left[i]] 不是 x 的子集
st = append(st, i)
}

st = []int{n}
for i := n - 1; i >= 0; i-- {
x := nums[i]
// 比如 nums = [...,1,...,1,...],我们规定,包含左边的 1 的子数组,不能包含右边的 1,从而避免重复统计子数组
// 注:包含右边的 1 的子数组,可以包含左边的 1
forlen(st) > 1 && nums[st[len(st)-1]] != x && nums[st[len(st)-1]]|x == x {
st = st[:len(st)-1]
}
right := st[len(st)-1] // nums[right] 不是 x 的子集
st = append(st, i)

// 子数组左端点可以从 left[i]+1 到 i,一共 i-left[i] 个
// 子数组右端点可以从 i 到 right-1,一共 right-i 个
ans += int64(i-left[i]) * int64(right-i)
}

return
}

func main() {
nums := []int{4, 2, 3}
result := countGoodSubarrays(nums)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

def countGoodSubarrays(nums):
n = len(nums)
left = [0] * n
st = [-1] # 哨兵
for i, x in enumerate(nums):
while len(st) > 1 and (nums[st[-1]] | x) == x:
st.pop()
left[i] = st[-1] # nums[left[i]] 不是 x 的子集
st.append(i)

ans = 0
st = [n]
for i in range(n - 1, -1, -1):
x = nums[i]
while len(st) > 1 and nums[st[-1]] != x and (nums[st[-1]] | x) == x:
st.pop()
right = st[-1] # nums[right] 不是 x 的子集
st.append(i)

ans += (i - left[i]) * (right - i)

return ans

if __name__ == "__main__":
nums = [4, 2, 3]
result = countGoodSubarrays(nums)
print(result)

C++完整代码如下:

  


using namespace std;

long long countGoodSubarrays(vector& nums) {
int n = nums.size();
vector left(n);
vector st;
st.push_back(-1); // 哨兵
for (int i = 0; i < n; ++i) {
int x = nums[i];
while (st.size() > 1 && (nums[st.back()] | x) == x) {
st.pop_back();
}
left[i] = st.back(); // nums[left[i]] 不是 x 的子集
st.push_back(i);
}

long long ans = 0;
st.clear();
st.push_back(n);
for (int i = n - 1; i >= 0; --i) {
int x = nums[i];
// 比如 nums = [...,1,...,1,...],我们规定,包含左边的 1 的子数组,不能包含右边的 1,从而避免重复统计子数组
// 注:包含右边的 1 的子数组,可以包含左边的 1
while (st.size() > 1 && nums[st.back()] != x && (nums[st.back()] | x) == x) {
st.pop_back();
}
int right = st.back(); // nums[right] 不是 x 的子集
st.push_back(i);

// 子数组左端点可以从 left[i]+1 到 i,一共 i-left[i] 个
// 子数组右端点可以从 i 到 right-1,一共 right-i 个
ans += (long long)(i - left[i]) * (right - i);
}
return ans;
}

int main() {
vector nums = {4, 2, 3};
long long result = countGoodSubarrays(nums);
cout << result << endl;
return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
巴萨偷鸡不成蚀把米,罗梅罗为何拒投红蓝?夏天转会市场最热闹的那出戏,差点让巴萨演砸了

巴萨偷鸡不成蚀把米,罗梅罗为何拒投红蓝?夏天转会市场最热闹的那出戏,差点让巴萨演砸了

带你逛体坛
2026-08-12 16:40:05
北京未来降雨将时强时弱,预计明晨整体过程结束

北京未来降雨将时强时弱,预计明晨整体过程结束

北青网-北京青年报
2026-08-12 12:40:08
扛不住高温、争不过中国空调,热疯的欧洲人,干脆把整个班列包了

扛不住高温、争不过中国空调,热疯的欧洲人,干脆把整个班列包了

麓谷隐士
2026-08-12 06:25:03
就在刚刚,中国公开赛16强对阵揭晓,6-4,6-5,吴宜泽抽得好签,肖国栋面临苦战

就在刚刚,中国公开赛16强对阵揭晓,6-4,6-5,吴宜泽抽得好签,肖国栋面临苦战

小七说篮球
2026-08-12 10:00:48
男篮热身赛碰劲敌,郭士强挑选12人最强大名单,赵继伟迎来得力帮手

男篮热身赛碰劲敌,郭士强挑选12人最强大名单,赵继伟迎来得力帮手

大卫的篮球故事
2026-08-12 16:44:19
“一桌子黑暗料理!”母亲晒暑假伙食,网友:鸡蛋羹做得像石灰水!

“一桌子黑暗料理!”母亲晒暑假伙食,网友:鸡蛋羹做得像石灰水!

熙熙说教
2026-08-12 14:21:22
性专家说:当一个异性开口跟你要钱,要礼物,不管对方是不是想试探你的真心,你都应该明白,你已被对方列入供养者行列

性专家说:当一个异性开口跟你要钱,要礼物,不管对方是不是想试探你的真心,你都应该明白,你已被对方列入供养者行列

心理观察局
2026-08-05 06:46:04
原来易烊千玺母亲是她,大儿子培养成双料影帝,小儿子如今也成才

原来易烊千玺母亲是她,大儿子培养成双料影帝,小儿子如今也成才

阿讯说天下
2026-08-11 09:29:38
流亡莫斯科两年后,阿萨德被判处死刑,这回普京或也保不住他了?

流亡莫斯科两年后,阿萨德被判处死刑,这回普京或也保不住他了?

好贤观史记
2026-08-12 00:20:00
社保大数据全面倒查!挂靠、违规补缴,旧账终身追溯

社保大数据全面倒查!挂靠、违规补缴,旧账终身追溯

细说职场
2026-08-12 13:51:17
“农夫山泉设计师真是个天才”!网友:虎虎好看,购买欲!

“农夫山泉设计师真是个天才”!网友:虎虎好看,购买欲!

LOGO研究所
2026-08-12 10:54:42
你捡过最大的漏是什么?网友:二婚老婆离婚后,把一婚的女儿带走

你捡过最大的漏是什么?网友:二婚老婆离婚后,把一婚的女儿带走

游戏收藏指南
2026-08-06 14:30:25
郭富城带全家游新加坡!小2岁岳父给他撑伞惹争议,2女儿嘴凸明显

郭富城带全家游新加坡!小2岁岳父给他撑伞惹争议,2女儿嘴凸明显

刘森森
2026-08-11 14:06:28
罕见:演员贾冰被偷拍,连官媒也看不下去了!

罕见:演员贾冰被偷拍,连官媒也看不下去了!

仕道
2026-08-11 10:07:56
炸了!2.15万亿天量成交,A股明天的剧本已经写好——主角就是它?

炸了!2.15万亿天量成交,A股明天的剧本已经写好——主角就是它?

财报翻译官
2026-08-12 15:36:23
夺回藏南得一场大战?没必要,中国,正在“温水煮青蛙”

夺回藏南得一场大战?没必要,中国,正在“温水煮青蛙”

麓谷隐士
2026-08-12 08:30:08
和珅被处死前,皇上问:“你贪那么多钱,花得完吗?”和珅一句话,就让他愣住了

和珅被处死前,皇上问:“你贪那么多钱,花得完吗?”和珅一句话,就让他愣住了

品读时刻
2026-08-05 09:10:50
旱涝急转!重庆暴雨告别高温,看似降温解暑,危险远超很多人想象

旱涝急转!重庆暴雨告别高温,看似降温解暑,危险远超很多人想象

阿凯销售场
2026-08-12 12:51:58
日本:2nm 芯片试产成功!顶尖光刻机随便买,誓言要超台积电!

日本:2nm 芯片试产成功!顶尖光刻机随便买,誓言要超台积电!

兵卒史
2026-08-12 08:54:48
家长试卷“签字”走红,连老师都赞叹不绝:有这样的家长未来可期

家长试卷“签字”走红,连老师都赞叹不绝:有这样的家长未来可期

犀利强哥
2026-08-10 06:59:54
2026-08-12 17:16:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1388文章数 79关注度
往期回顾 全部

科技要闻

Manus第二季,浪子回头

头条要闻

"不死富豪"患胃病治不好了:曾与17岁儿子换血以求长寿

头条要闻

"不死富豪"患胃病治不好了:曾与17岁儿子换血以求长寿

体育要闻

杜兰特,所谓的“联盟小王”

娱乐要闻

老戏骨杨昆两夺金鹰奖,因物业费被告

财经要闻

李嘉诚,再一次大撤退!他嗅到了什么?

汽车要闻

这台大众不一般 上汽大众ID.ERA.5S综合续航约2000公里

态度原创

健康
房产
手机
教育
数码

心血管专家破解猝死八大谣言

房产要闻

价格登顶,断层领跑!澄迈这家楼盘,凭什么?

手机要闻

下月基于韬定律麒麟芯登场!华为准备两款重磅旗舰Mate 90和三折XT2

教育要闻

保持尊重和好奇,唤醒孩子的内在力量

数码要闻

颂拓推出SUUNTO CORE 2智能运动手表,1599元

无障碍浏览 进入关怀版