Find an Array such that mean of this and given Array together equals to K
Last Updated :
24 Nov, 2021
Given two integers N, K, and an array arr[] consisting of positive integers. The task is to find any possible array of size N such that the mean of arr[] and the array to be found together is K.
Examples:
Input: arr[] = {1, 5, 6}, N = 4, K = 3
Output: {1, 2, 3, 3}
Explanation: Mean of {1, 5, 6} and {1, 2, 3, 3} together is the following:
(1 + 5 + 6 + 1 + 2 + 3 + 3) / (3+4) = 3.
Therefore {1, 2, 3, 3} is possible array to make the mean = 3.
Input: arr[] = {7, 8, 6}, N = 2, K = 3
Output: Not Possible
Approach: This problem can be solved by using simple Number System Average concepts. Let’s say sumArr be the sum of array new_arr[] and M to be the size of new_arr[]. Then according to average concept the equation can be formed as:
(sumArr + X) / (N+M) = K, where X is sum of required array.
X = K * (N + M) – sumArr.
Therefore, sum of the required array should be X to make the mean equal to K. If X is less than N, then there is no way to form the array.
The simplest way to form the required array is
1, 1, 1, …(M-1 times), X-(M-1)
.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
vector< int > findArray(vector< int > arr,
int N, int K)
{
int sumArr = 0;
int M = int (arr.size());
for ( int i = 0; i < M; i++) {
sumArr += arr[i];
}
int X = K * (N + M) - sumArr;
if (X < N) {
cout << "Not Possible" ;
return {};
}
vector< int > res(N);
for ( int i = 0; i < N - 1; i++) {
res[i] = 1;
}
res[N - 1] = X - (N - 1);
return res;
}
int main()
{
vector< int > arr = { 1, 5, 6 };
int N = 4, K = 3;
vector< int > ans = findArray(arr, N, K);
for ( int i = 0; i < ans.size(); i++)
cout << ans[i] << " " ;
}
|
Java
public class GFG {
static void findArray( int []arr,
int N, int K)
{
int sumArr = 0 ;
int M = arr.length;
for ( int i = 0 ; i < M; i++) {
sumArr += arr[i];
}
int X = K * (N + M) - sumArr;
if (X < N) {
System.out.println( "Not Possible" );
}
int []res = new int [N];
for ( int i = 0 ; i < N - 1 ; i++) {
res[i] = 1 ;
}
res[N - 1 ] = X - (N - 1 );
for ( int i = 0 ; i < res.length; i++)
System.out.print(res[i] + " " );
}
public static void main (String[] args)
{
int []arr = { 1 , 5 , 6 };
int N = 4 , K = 3 ;
findArray(arr, N, K);
}
}
|
Python3
def findArray(arr, N, K):
sumArr = 0
M = len (arr)
for i in range ( 0 , M):
sumArr + = arr[i]
X = K * (N + M) - sumArr
if (X < N):
print ( "Not Possible" )
return []
res = [ 0 for _ in range (N)]
for i in range ( 0 , N - 1 ):
res[i] = 1
res[N - 1 ] = X - (N - 1 )
return res
if __name__ = = "__main__" :
arr = [ 1 , 5 , 6 ]
N = 4
K = 3
ans = findArray(arr, N, K)
for i in range ( 0 , len (ans)):
print (ans[i], end = " " )
|
C#
using System;
public class GFG {
static void findArray( int []arr,
int N, int K)
{
int sumArr = 0;
int M = arr.Length;
for ( int i = 0; i < M; i++) {
sumArr += arr[i];
}
int X = K * (N + M) - sumArr;
if (X < N) {
Console.WriteLine( "Not Possible" );
}
int []res = new int [N];
for ( int i = 0; i < N - 1; i++) {
res[i] = 1;
}
res[N - 1] = X - (N - 1);
for ( int i = 0; i < res.Length; i++)
Console.Write(res[i] + " " );
}
public static void Main ( string [] args)
{
int []arr = { 1, 5, 6 };
int N = 4, K = 3;
findArray(arr, N, K);
}
}
|
Javascript
<script>
function findArray(arr, N, K) {
let sumArr = 0;
let M = (arr.length);
for (let i = 0; i < M; i++) {
sumArr += arr[i];
}
let X = K * (N + M) - sumArr;
if (X < N) {
document.write( "Not Possible" );
return [];
}
let res = new Array(N);
for (let i = 0; i < N - 1; i++) {
res[i] = 1;
}
res[N - 1] = X - (N - 1);
return res;
}
let arr = [1, 5, 6];
let N = 4, K = 3;
let ans = findArray(arr, N, K);
for (let i = 0; i < ans.length; i++)
document.write(ans[i] + " " );
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(N)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...