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

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.

相关推荐
热点推荐
9个月大宝宝抓蟑螂放进嘴里,妈妈发现时只抠出一条虫腿:第二天拉了6次吐了2次,排泄物中能看到蟑螂残体……

9个月大宝宝抓蟑螂放进嘴里,妈妈发现时只抠出一条虫腿:第二天拉了6次吐了2次,排泄物中能看到蟑螂残体……

都市快报橙柿互动
2026-06-03 23:16:20
为什么说闲鱼是中国最大的黑市?网友:我直接给跪了!

为什么说闲鱼是中国最大的黑市?网友:我直接给跪了!

另子维爱读史
2026-06-02 10:51:07
刷屏!北京大学饶毅教授直言:中国学术不端比例世界空前

刷屏!北京大学饶毅教授直言:中国学术不端比例世界空前

TOP大学来了
2026-06-02 19:24:41
公安部公布4起污染环境犯罪典型案例

公安部公布4起污染环境犯罪典型案例

界面新闻
2026-06-03 16:38:04
问界回应M9起火事件:前车掉落金属部件拖行引燃,非车辆自身原因

问界回应M9起火事件:前车掉落金属部件拖行引燃,非车辆自身原因

热点科技
2026-06-03 14:01:20
萨巴伦卡:不明白为什么要开着顶棚,我现在只想退出网坛

萨巴伦卡:不明白为什么要开着顶棚,我现在只想退出网坛

懂球帝
2026-06-04 00:07:25
损失惨重!仲裁员裁决:罗齐尔2660万薪水绝大部分将被扣除

损失惨重!仲裁员裁决:罗齐尔2660万薪水绝大部分将被扣除

罗说NBA
2026-06-04 07:26:17
他们太强了!尼克斯14分大逆转马刺1-0,2个没想到,季后赛12连胜

他们太强了!尼克斯14分大逆转马刺1-0,2个没想到,季后赛12连胜

小徐讲八卦
2026-06-04 11:31:27
里克尔梅:若哈兰德和罗德里没有加盟,我将支付全部会员会费

里克尔梅:若哈兰德和罗德里没有加盟,我将支付全部会员会费

懂球帝
2026-06-04 06:20:09
多国强烈反对美国新关税提案,中方:中国不存在所谓的强迫劳动,反对以此为借口搞政治操弄

多国强烈反对美国新关税提案,中方:中国不存在所谓的强迫劳动,反对以此为借口搞政治操弄

环球网资讯
2026-06-04 07:03:11
布伦森轰30分!马刺0-1落后尼克斯,数据一目了然,输球罪魁是他

布伦森轰30分!马刺0-1落后尼克斯,数据一目了然,输球罪魁是他

球场没跑道
2026-06-04 11:21:22
俄罗斯前陆军总参谋长拉平被判处终身监禁!曾指挥攻打基辅

俄罗斯前陆军总参谋长拉平被判处终身监禁!曾指挥攻打基辅

项鹏飞
2026-06-03 18:23:02
极氪在基辅的销售中心被俄罗斯空袭多人遇难

极氪在基辅的销售中心被俄罗斯空袭多人遇难

鸿雁复北翔热评
2026-06-03 14:50:09
1-0!总决赛尼克斯先下一城,文班亚马低迷,马刺暴露最大短板

1-0!总决赛尼克斯先下一城,文班亚马低迷,马刺暴露最大短板

篮球圈里的那些事
2026-06-04 11:33:36
董路又封神!14岁足球小将加盟巴萨 闪耀西班牙:33场14球11助

董路又封神!14岁足球小将加盟巴萨 闪耀西班牙:33场14球11助

念洲
2026-06-04 09:38:24
罕见一幕出现!日本不到24小时,拒绝台湾,告诉民进党他不配上桌

罕见一幕出现!日本不到24小时,拒绝台湾,告诉民进党他不配上桌

共工之锚
2026-06-03 22:37:00
大心脏,布伦森末节13分助尼克斯胜马刺,他薪水比哈登还少500万

大心脏,布伦森末节13分助尼克斯胜马刺,他薪水比哈登还少500万

姜大叔侃球
2026-06-04 11:33:33
一张“走光照”挂在万人直播间67分钟!选手的照片,该如何保护?

一张“走光照”挂在万人直播间67分钟!选手的照片,该如何保护?

马拉松跑步健身
2026-06-03 19:40:53
中国越野车,即将惊艳世界!

中国越野车,即将惊艳世界!

车旅人牛姑娘
2026-06-03 22:57:38
郑丽文抵美不到24小时,鲁比奥突然承认现实,一句表态信息量很大

郑丽文抵美不到24小时,鲁比奥突然承认现实,一句表态信息量很大

邱震海
2026-06-03 21:05:03
2026-06-04 11:44:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1264文章数 69关注度
往期回顾 全部

科技要闻

历史最大IPO!马斯克下周冲击万亿富豪

头条要闻

江苏一单亲妈妈和小12岁男子姐弟恋 怀孕后男友玩失联

头条要闻

江苏一单亲妈妈和小12岁男子姐弟恋 怀孕后男友玩失联

体育要闻

王俊杰11前板成第一尖刀 媒体人:独一档

娱乐要闻

奚梦瑶头纱上的古董发卡也是四太的

财经要闻

SpaceX发行价135美元 6月12日上市交易

汽车要闻

北京现代5月销量强势反弹:国内17065辆 出口环比翻倍

态度原创

亲子
教育
数码
艺术
时尚

亲子要闻

深圳幼儿园萌娃走进高三课堂,跨越学段暖心送上高考祝福

教育要闻

山东春季高考和夏季高考成绩6月25日15:00后公布

数码要闻

MONTECH迎来十周年,多款机箱新品台北现身

艺术要闻

唐寅『梅花册』

粗腿宽肩,正在成为中女审美新风向

无障碍浏览 进入关怀版