Given an array of n integers, find the sum of f(a[i], a[j]) of all pairs (i, j) such that (1 <= i < j <= n).
If |a[j]-a[i]| > 1 f(a[i], a[j]) = a[j] - a[i] Else // if |a[j]-a[i]| <= 1 f(a[i], a[j]) = 0
Input : 6 6 4 4 Output : -8 Explanation: All pairs are: (6 - 6) + (6 - 6) + (6 - 6) + (4 - 6) + (4 - 6) + (4 - 6) + (4 - 6) + (4 - 4) + (4 - 4) = -8 Input: 1 2 3 1 3 Output: 4 Explanation: the pairs that add up are: (3, 1), (3, 1) to give 4, rest all pairs according to condition gives 0.
A naive approach is to iterate through all pairs and calculate f(a[i], a[j]) and summing it while traversing in two nested loops will give us our answer.
Time Complexity: O(n^2)
A efficient approach will be to use a map/hash function to keep a count of every occurring numbers and then traverse through the list. While traversing through the list, we multiply the count of numbers that are before it and the number itself. Then subtract this result with the pre-sum of the number before that number to get the sum of difference of all pairs possible with that number. To remove all pairs whose absolute difference is <=1, simply subtract the count of occurrence of (number-1) and (number+1) from the previously computed sum. Here we subtract count of (number-1) from the computed sum as it had been previously added to the sum, and we add (number+1) count since the negative has been added to the pre-computed sum of all pairs.
Time Complexity : O(n)
Below is the implementation of the above approach :
- Minimum product of k integers in an array of positive Integers
- Count of all possible pairs of disjoint subsets of integers from 1 to N
- Find the maximum cost of an array of pairs choosing at most K pairs
- Given an array of pairs, find all symmetric pairs in it
- Find pairs in array whose sums already exist in array
- Factorial of an Array of integers
- Converting an array of integers into Zig-Zag fashion!
- Find the first repeating element in an array of integers
- Count of integers that divide all the elements of the given array
- Longest sequence of positive integers in an array
- Print all the peaks and troughs in an Array of Integers
- Check if array contains contiguous integers with duplicates allowed
- Minimum increments to convert to an array of consecutive integers
- Move all zeros to start and ones to end in an Array of random integers
- Given an array and two integers l and r, find the kth largest element in the range [l, r]
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.