Consecutive sequence with sum 0

本文介绍了一种算法,用于计算整数数组中连续子数组的个数,这些子数组的元素之和等于零。通过计算前缀和并查找相等的前缀和来确定是否存在零和子数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

You are given an integer array which contains positive integers, zero and negetive integers
count how many consecutive sequences in this array make a sum of 0.

exmaple
int[] a = {4, -1, 2, 1, -2, -1, 5, 0} ;
The result is 2
-1, 2, 1, -2, makes a sum of 0
2, 1, -2, -1, makes a sum of 0
0 makes a sum of 0

consider a consecutive sequence in array a, say xi, ... xj, if xi + ... + xj = 0, then x0 + .. + x(i-1) = x0 + .. + xj
so we can compute all the prefix sum of array a, and see whether there are equal elements among these sum
if there is, then there must be some consecutive sequence, makes sum of 0

 

ContractedBlock.gifExpandedBlockStart.gifCode
 1 public int Count(int[] a)
 2 {
 3     // Compute prefix sum
 4     int[] sum = new int[a.Length];
 5     sum[0= a[0];
 6     for (int i = 1; i < sum.Length; i++)
 7         sum[i] = sum[i - 1+ a[i];
 8 
 9     Array.Sort(sum); // for quick determine same prefix sum
10     int c = 0;// result
11     if (sum[0== 0)
12         c++;
13     for (int i = 1; i < sum.Length; i++)
14     {
15         if (sum[i] == 0// the consecutive sequence start from a[0]
16             c++;
17         if (sum[i] == sum[i - 1])// the consecutive sequence not start from a[0]
18             c++;
19     }
20     return c;
21 }
22 

 

转载于:https://www.cnblogs.com/graphics/archive/2009/06/09/1499768.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值