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

2026-05-17:中心子数组的数量。用go语言,给定一个整数数组 nums。 考虑数组中的任意一个连续非空子数组。若该子数组的“总和”恰好等于

0
分享至

2026-05-17:中心子数组的数量。用go语言,给定一个整数数组 nums。

考虑数组中的任意一个连续非空子数组。若该子数组的“总和”恰好等于该子数组中“至少一个元素的值”,则称这个子数组为中心子数组。

你的任务是:统计 nums 中所有中心子数组的数量,并返回这个数量。

1 <= nums.length <= 500。

-100000 <= nums[i] <= 100000。

输入: nums = [-1,1,0]。

输出: 5。

解释:

所有单元素子数组([-1],[1],[0])都是中心子数组。

子数组 [1, 0] 的元素之和为 1,且 1 存在于该子数组中。

子数组 [-1, 1, 0] 的元素之和为 0,且 0 存在于该子数组中。

因此,答案是 5。

题目来自力扣3804。

中心子数组统计过程详细解析 第一步:明确所有连续非空子数组

数组长度为3,总共有6个连续非空子数组(所有可能的连续片段):

  1. 1.[-1](起始索引0,结束索引0)

  2. 2.[-1,1](起始索引0,结束索引1)

  3. 3.[-1,1,0](起始索引0,结束索引2)

  4. 4.[1](起始索引1,结束索引1)

  5. 5.[1,0](起始索引1,结束索引2)

  6. 6.[0](起始索引2,结束索引2)

第二步:逐一枚举所有子数组,判断是否为中心子数组

代码的核心逻辑是:固定子数组的起点,依次扩展终点,遍历所有子数组,同时用哈希表记录当前子数组包含的元素,快速判断「总和是否存在于子数组中」。

阶段1:固定起点为索引0(元素:-1)

从第一个元素开始,逐步向右扩展子数组:

  1. 1.子数组 [-1]

  • • 元素:{-1}

  • • 总和:-1

  • • 判断:总和 -1 存在于元素中 → 是中心子数组,计数+1

2.子数组 [-1,1]

  • • 元素:{-1,1}

  • • 总和:-1+1=0

  • • 判断:总和0 不存在于元素中 → 不是,计数不变

3.子数组 [-1,1,0]

  • • 元素:{-1,1,0}

  • • 总和:-1+1+0=0

  • • 判断:总和0 存在于元素中 → 是中心子数组,计数+1
    ✅ 此阶段累计:2个

阶段2:固定起点为索引1(元素:1)

清空之前的记录,从第二个元素开始扩展:

  1. 1.子数组 [1]

  • • 元素:{1}

  • • 总和:1

  • • 判断:总和1 存在于元素中 → 是中心子数组,计数+1

2.子数组 [1,0]

  • • 元素:{1,0}

  • • 总和:1+0=1

  • • 判断:总和1 存在于元素中 → 是中心子数组,计数+1
    ✅ 此阶段累计:2个(总计数:4)

阶段3:固定起点为索引2(元素:0)

清空之前的记录,从第三个元素开始扩展:

  1. 1.子数组 [0]

  • • 元素:{0}

  • • 总和:0

  • • 判断:总和0 存在于元素中 → 是中心子数组,计数+1
    ✅ 此阶段累计:1个(总计数:5)

第三步:最终统计

所有符合条件的中心子数组:

  1. 1. [-1]

  2. 2. [-1,1,0]

  3. 3. [1]

  4. 4. [1,0]

  5. 5. [0]
    总计5个,与题目输出一致。

代码核心逻辑通俗解释
  1. 1.双重循环遍历所有子数组:外层循环固定子数组的起点,内层循环从起点开始向右扩展,确定子数组的终点,覆盖所有连续子数组。

  2. 2.哈希表记录当前子数组元素:每扩展一个终点,就把新元素存入哈希表(快速去重,只记录元素是否存在)。

  3. 3.实时计算子数组总和:每扩展一个元素,就累加计算当前子数组的总和。

  4. 4.快速判断:检查「总和」是否在哈希表中(即是否存在于当前子数组),如果存在,就将结果计数+1。

时间复杂度 & 空间复杂度 1. 时间复杂度
  • • 外层循环:遍历数组的每个元素作为起点,执行n 次(n是数组长度)。

  • • 内层循环:每个起点最多向右遍历到数组末尾,平均执行n/2 次,总次数为 n² 级别。

  • • 哈希表的插入、查询操作都是O(1)常数时间。

  • • 总时间复杂度:O(n²)(n为数组长度,本题n≤500,n²=25万,完全满足要求)。

2. 空间复杂度
  • • 代码中使用了一个哈希表,每次遍历新起点时都会清空哈希表

  • • 哈希表最多存储当前子数组的所有唯一元素,子数组最长为n,元素最多n个。

  • • 总空间复杂度:O(n)(额外空间仅为哈希表,最大占用n个元素的空间)。

总结
  1. 1. 计算过程:通过固定起点+扩展终点遍历所有连续子数组,用哈希表记录元素,实时计算总和并判断是否符合条件;

  2. 2. 时间复杂度:O(n²)(双重循环);

  3. 3. 空间复杂度:O(n)(哈希表临时存储元素)。

Go完整代码如下:

package main

import (
"fmt"
)

func centeredSubarrays(nums []int) (ans int) {
has := map[int]int{}
for i := range nums {
clear(has)
s := 0
for _, x := range nums[i:] {
has[x] = 1
s += x
ans += has[s]
}
}
return
}

func main() {
nums := []int{-1, 1, 0}
result := centeredSubarrays(nums)
fmt.Println(result)
}

Python完整代码如下:

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

def centeredSubarrays(nums):
ans = 0
n = len(nums)
for i in range(n):
has = {}
s = 0
for j in range(i, n):
x = nums[j]
has[x] = 1
s += x
ans += has.get(s, 0)
return ans

def main():
nums = [-1, 1, 0]
result = centeredSubarrays(nums)
print(result)

if __name__ == "__main__":
main()

C++完整代码如下:

  




using namespace std;

int centeredSubarrays(vector& nums) {
int ans = 0;
unordered_map has;

for (int i = 0; i < nums.size(); i++) {
has.clear();
int s = 0;
for (int j = i; j < nums.size(); j++) {
int x = nums[j];
has[x] = 1;
s += x;
ans += has[s]; // 如果 s 不存在于 map 中,has[s] 会返回 0
}
}
return ans;
}

int main() {
vector nums = {-1, 1, 0};
int result = centeredSubarrays(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.

相关推荐
热点推荐
Wan 3.0 有了自己的镜头美学

Wan 3.0 有了自己的镜头美学

爱范儿
2026-08-06 22:50:37
时代落幕:本田正式暂停在华燃油车厂,日系燃油车退出中国倒计时

时代落幕:本田正式暂停在华燃油车厂,日系燃油车退出中国倒计时

史之铭
2026-08-07 16:27:46
3人租车未获实体钥匙被困川西海拔3700米野外10余小时,门店回应

3人租车未获实体钥匙被困川西海拔3700米野外10余小时,门店回应

上游新闻
2026-08-07 16:38:23
国产全新复古掌机早鸟价公布:599元起售

国产全新复古掌机早鸟价公布:599元起售

游民星空
2026-08-07 12:39:15
因14岁儿子说“大不了去送外卖”,爸爸三伏天带他当外卖员,仅负责骑车并提供100元启动资金,其他由儿子负责;20天后意外修复父子关系

因14岁儿子说“大不了去送外卖”,爸爸三伏天带他当外卖员,仅负责骑车并提供100元启动资金,其他由儿子负责;20天后意外修复父子关系

深圳晚报
2026-08-07 14:42:18
汪峰:公司因AI已从1100人优化到400人 运营效率显著提升

汪峰:公司因AI已从1100人优化到400人 运营效率显著提升

快科技
2026-08-07 12:25:08
暴跌35%!年销17亿的“国民神药”凉了,车主:再便宜也不敢吃

暴跌35%!年销17亿的“国民神药”凉了,车主:再便宜也不敢吃

青眼财经
2026-08-07 15:43:38
燃油车时代会很快结束?内行人预测:油价很可能是最后的关键!

燃油车时代会很快结束?内行人预测:油价很可能是最后的关键!

离离言几许
2026-08-07 16:09:59
迟来的发现:新冠会唤醒体内大量潜伏病毒

迟来的发现:新冠会唤醒体内大量潜伏病毒

生物世界
2026-08-06 16:30:35
王楠的天塌了,她老公直播爆粗怒怼:我沾她屁光!全网炸锅

王楠的天塌了,她老公直播爆粗怒怼:我沾她屁光!全网炸锅

涵有话说
2026-08-07 09:40:25
28岁波兰名将辱华:宁波是贫民窟 中国不如日本 网友:秒杀华沙

28岁波兰名将辱华:宁波是贫民窟 中国不如日本 网友:秒杀华沙

念洲
2026-08-07 19:36:57
5小时2重磅签字——皇马一夜之间,给全欧洲上了一课

5小时2重磅签字——皇马一夜之间,给全欧洲上了一课

林子说事
2026-08-07 10:46:01
傲慢?波兰排球名将称宁波如贫民窟+不如日本!遭围攻:以后别来中国

傲慢?波兰排球名将称宁波如贫民窟+不如日本!遭围攻:以后别来中国

我爱英超
2026-08-07 16:22:01
梁文锋这次玩大了!彭博社爆料:DeepSeek刚融到几百亿,转头就跑内蒙建基地了!

梁文锋这次玩大了!彭博社爆料:DeepSeek刚融到几百亿,转头就跑内蒙建基地了!

青青子衿
2026-08-07 11:44:34
空调24小时开着反而更省电?电力部门回应

空调24小时开着反而更省电?电力部门回应

第一财经资讯
2026-08-07 12:53:39
北京深夜出新政!新一轮楼市调整来了

北京深夜出新政!新一轮楼市调整来了

拾榴询财
2026-08-07 22:55:36
记者实地探访“婚外胚胎案”涉事医院:就诊流程中明确标注建档需要结婚证原件,工作人员哽咽称近期舆情对医院造成较大冲击

记者实地探访“婚外胚胎案”涉事医院:就诊流程中明确标注建档需要结婚证原件,工作人员哽咽称近期舆情对医院造成较大冲击

大风新闻
2026-08-07 16:50:33
佛山一中学招聘物理教师,笔试前13名均遭淘汰?教育局:已叫停招聘,成立调查组全面核查

佛山一中学招聘物理教师,笔试前13名均遭淘汰?教育局:已叫停招聘,成立调查组全面核查

极目新闻
2026-08-07 15:53:23
反转!重庆游客睡车上伊犁酒店收150元后续:游客隐瞒事实,酒店方发声,大喊无辜

反转!重庆游客睡车上伊犁酒店收150元后续:游客隐瞒事实,酒店方发声,大喊无辜

李晚书
2026-08-07 13:25:23
中期选举成了屎中选屎

中期选举成了屎中选屎

码薯学人
2026-08-07 14:17:06
2026-08-08 01:47:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1380文章数 78关注度
往期回顾 全部

科技要闻

突然涨价,"只收电费钱"的梁文锋,变了吗

头条要闻

2岁患儿就诊死亡首诊医生获刑 不少医生为其鸣不平

头条要闻

2岁患儿就诊死亡首诊医生获刑 不少医生为其鸣不平

体育要闻

去年信誓旦旦3000万 今年NBA查无此人

娱乐要闻

周也热恋结束,六个字暴露单身状态

财经要闻

腾讯WorkBuddy领跑AI办公 阿里字节急了?

汽车要闻

越7全球首秀 传祺开始进攻方盒子越野

态度原创

本地
时尚
房产
公开课
军事航空

本地新闻

课本里的童年,绍兴正上演

从帆布袋到爱马仕,她们最爱的新包是这些

房产要闻

单日狂卖35亿!两大央企重仓,三亚土拍又爆了!

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

乌防空导弹严重短缺 泽连斯基公开喊话

无障碍浏览 进入关怀版