Find all differences in an array in O(n)

前端 未结 7 992
没有蜡笔的小新
没有蜡笔的小新 2020-12-30 05:39

Question: Given a sorted array A find all possible difference of elements from A.

My solution:

for (int i=0; i

        
7条回答
  •  隐瞒了意图╮
    2020-12-30 06:16

    First of all the array need to be sorted

    lets think a sorted array ar = {1,2,3,4}

    so what we were doing at the O(n^2)

    for(int i=0; i

    if we do the operations here elaborately then it will look like below

    when i = 0 | sum = sum + {(2-1)+(3-1)+(4-1)}                   
    when i = 1 | sum = sum + {(3-2)+(4-2)}               
    when i = 2 | sum = sum + {(4-3)}
    

    if we write them all

    sum = ( -1-1-1) + (2+ -2-2) + (3+3 -3) + (4+4+4 ) 
    

    we can see that

    the number at index 0 is added to the sum for 0 time and substracted from the sum for 3 time.
    the number at index 1 is added to the sum for 1 time and substracted from the sum for 2 time.
    the number at index 2 is added to the sum for 2 time and substracted from the sum for 1 time.
    the number at index 3 is added to the sum for 3 time and substracted from the sum for 0 time.

    so for we can say that,

    the number at index i will be added to the sum for i time 
    and will be substracted from the sum for (n-i)-1 time
    

    Then the generalized expression for each element will be

    sum = sum + (i*a[i]) – ((n-i)-1)*a[i];
    

提交回复
热议问题