Amazon OA SDE New Grad 2023
Anonymous User
477

Given an array find the list of smallest k differences among the array itself.

for arr = [6,9,1] and k=3 -> [3,5,8]
diff(6,9) = 3
diff(6,1) = 5
diff(9,1) = 8

for arr [6, 4, 4, 7, 10] and k =10 => [0, 1, 2, 2, 3, 3, 3, 4, 6, 6]
diff(4,4) = 0
diff(4,6) = 2
diff(4,7) = 3
diff(4,10) = 6
diff(4,6) = 2
diff(4,7) = 3
diff(4,10) = 6
diff(6,7) = 1
diff(6,10) = 4
diff(7,10) = 3

for arr [3,1,3,5] and k=3 => [0, 2, 2]
diff(1,3) = 2
diff(1,3) = 2
diff(1,5) = 4
diff(3,3) = 0
diff(3,5) = 2
diff(3,5) = 2

brute force implementation is below but the issue is with the constraints
n (array_length) = 2 * 10^5
1<= arr[i] <= 10^8
1<=k<=min(210^5 , n(n-1)/2)

def getSmallestInefficiencies(arr,k):
    arr.sort()
    ans=[]
    for i in range(0,len(arr)-1):
        for j in range(i+1,len(arr)):
            ans.append(abs(arr[i]-arr[j]))
    ans.sort()
    return ans[:k]

for big input sizes it gives memory error as array size can go beyond 10^10.

Need help.

Comments (1)