There's an array of numbers A[1]...A[N]. Need to compute another array of numbers S[1]...S[N] such that each S[i] is a sum of all the elements A[1]...A[N] except the element A[i]. In other words:
S[i] = ƩA[j], 1 <= j <= N && j != i
Solution:
We need two passes over the array A[]. One to compute the sum in the forward direction (1..N) and assign the accumulated sum to each S[i] element. Another pass is performed in the backward direction (N..1) and adds the accumulated sum to the corresponding S[i] element. Each of the passes ensures that the sum accumulated in S[i] does not contain the value of A[i] itself:
1. take a variable say, Sum, initialize it as Sum = 0. 2. For index i=1 to N do : S[i] = Sum; Sum+=A[i]; 3. Sum = 0; 4. For index i=N down to 1 do: S[i]+=Sum; Sum+=A[i]; 5. Done.
Complexity:
time - O(n)Links and credits:
space - O(1)
http://www.careercup.com/question?id=19301668
No comments:
Post a Comment