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
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
相关文章推荐
- 【LeetCode with Python】 Longest Consecutive Sequence
- leetcode --day12 Surrounded Regions & Sum Root to Leaf Numbers & Longest Consecutive Sequence
- [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
- leetcode题目:Sum Root to Leaf Numbers和Longest Consecutive Sequence
- No. 04 - Paths with Specified Sum in Binary Tree
- Sum of Consecutive Prime Numbers
- Longest Consecutive Sequence(最长连续序列)
- UVa1210 - Sum of Consecutive Prime Numbers
- hdu Max Sum of Max-K-sub-sequence 单调队列优化DP
- [python]leetcode(128). Longest Consecutive Sequence
- HDU 3415 Max Sum of Max-K-sub-sequence[单调队列优化dp]
- 2739 -- Sum of Consecutive Prime Numbers
- 【DP+单调队列】 hdu3415 Max Sum of Max-K-sub-sequence
- [Leetcode]Binary Tree Longest Consecutive Sequence
- hdu - 3415 Max Sum of Max-K-sub-sequence
- hdu 5204 Rikka with sequence(BestCoder Round #37)
- lintcode-medium-Longest Consecutive Sequence
- POJ-2739-Sum of Consecutive Prime Numbers
- Array(12) -- Longest Consecutive Sequence, First Missing Positive, Buy and Sell Stock III, Find Mini
- poj 2739 Sum of Consecutive Prime Numbers