在不改变平均值的情况下可以从 Array 中移除的对数
给定一个大小为N的数组arr[] ,任务是找出数组的对数,删除后数组的均值(即所有元素的平均值)保持不变。
例子:
Input: N = 5, arr[] = {1, 4, 7, 3, 5}
Output: 2
Explanation: The required pairs of positions are – {0, 2} and {3, 4}.
Mean of original array = (1 + 4 + 7 + 3 + 5) / 5 = 4.
On deletion of elements at positions 0 and 2, array becomes {4, 3, 5}.
Mean of the new array = (4 + 3 + 5) / 3 = 4. which is same as the mean of original array.
On deletion of elements at positions 3 and 4, array becomes {1, 4, 7}.
Mean of the new array = (1 + 4 + 7) / 3 = 4. which is same as the mean of original array.
Input: N = 3, A = {50, 20, 10}
Output: 0
Explanation: No such pair is possible.
方法:考虑以下观察:
Observation:
If a sum (S = 2*mean) is subtracted from the original array (with initial mean = M), the mean of the new updated array will still remains as M.
Derivation:
- Sum of array (of size N) = N * mean = N * M
- new mean = (sum of array – 2 * M) / (N – 2)
=(N*M – 2*M)/(N – 2)
= M.
可以按照以下步骤来解决问题 -
- 计算给定数组的平均值。
- 计算所需的总和S即2*mean 。
- 如果S不是整数,则返回0 ,因为不会有任何对具有非整数和。
- 否则,通过散列找到许多所需的对。
下面是上述方法的实现:
C++
// C++ code to implement the above approach
#include
using namespace std;
// Function to calculate the number
// of pairs of positions [i, j] (i 0) {
return 0;
}
else {
// Initialising count variable to
// store total number of valid pairs
int count = 0;
// Declaring a map to calculate
// number of pairs with required sum
map mp;
// Standard procedure to calculate
// total number of pairs
// of required sum
for (int i = 0; i < n; i++) {
if (i > 0) {
count += mp[required_sum
- A[i]];
}
mp[A[i]]++;
}
// Returning count
return count;
}
// If no pairs with required sum
return 0;
}
// Driver code
int main()
{
int N = 5;
int arr[] = { 1, 4, 7, 3, 5 };
int numberOfPairs = countPairs(N, arr);
cout << numberOfPairs;
return 0;
}
Python
# Python code to implement the above approach
# Function to calculate the number
# of pairs of positions [i, j] (i 0):
return 0
else:
# Initialising count variable to
# store total number of valid pairs
count = 0
# Declaring a map to calculate
# number of pairs with required sum
mp = {}
# Standard procedure to calculate
# total number of pairs
# of required sum
for i in range(0, n):
if (i > 0 and required_sum - A[i] in mp):
count += mp[required_sum - A[i]]
if arr[i] in mp:
mp[arr[i]] += 1
else:
mp[arr[i]] = 1
# Returning count
return count
# If no pairs with required sum
return 0
# Driver code
N = 5
arr = [ 1, 4, 7, 3, 5 ]
numberOfPairs = countPairs(N, arr)
print(numberOfPairs)
# This code is contributed by Samim Hossain Mondal.
Javascript
2
时间复杂度: O(N)
辅助空间: O(N)