您的位置:首页 > 产品设计 > UI/UE

Consecutive sequence with sum 0

2009-06-09 16:26 411 查看
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

Code
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: