Open in App
Not now

# Generate a N size Array where MEX of every K sized Subarray is X

• Last Updated : 07 Mar, 2022

Given three integers N, K and X. The task is to construct an array of size N where MEX of every K sized subarray is X. Print the constructed array elements, if not possible print -1.

Examples:

Input: N = 4, K = 3, X = 2
Output: 1 3 4 1
Explanation: Subarray of size K = 3 are: {1, 3, 4} and {3, 4, 1} and MEX of both the arrays are X = 2.

Input: N = 5, K = 4, X = 5
Output: 1 2 3 4 1
Explanation: Subarray of size K = 4 are: {1, 2, 3, 4} and {2, 3, 4, 1} and MEX of both the array is X = 5.

Approach: The solution to the problem is based on simple observation. If X is at most (K+1) till then the array can be built. Otherwise, it cannot be built. Follow the steps mentioned below to solve the problem:

• Initialize an array nums[] of size N.
• If value of X is greater than K+1, the array is not possible.
• Fill first K indices starting from 1 and increase the value by 1 every time for the other indices. Skip the value of X when it is to be filled.
• After that fill rest of the indices i.e from K â‰¤ i â‰¤ N with value nums[i – K].
• The nums[] array is the required array.

Below is the implementation of the above approach:

## C++

 `// C++ code to implement the above approach` `#include ` `using` `namespace` `std;`   `// Function to create array of size N` `void` `MEXSubarray(``int` `N, ``int` `K, ``int` `X)` `{` `    ``// If X > K+1 then it is not` `    ``// possible to create such array` `    ``if` `(X > K + 1)` `        ``cout << -1 << endl;`   `    ``// Creating array nums of size N` `    ``else` `{` `        ``int` `val = 1;`   `        ``// Initializing nums` `        ``int` `nums[N] = { 0 };`   `        ``// Filling first K indices` `        ``for` `(``int` `i = 0; i < K; i++) {`   `            ``// Creating MEX in K` `            ``// sized subarray` `            ``if` `(val == X)` `                ``nums[i] = ++val;` `            ``else` `                ``nums[i] = val;` `            ``val++;` `        ``}`   `        ``// Filling rest of the indices` `        ``for` `(``int` `i = K; i < N; i++)` `            ``nums[i] = nums[i - K];`   `        ``// Printing Array` `        ``for` `(``int` `v : nums)` `            ``cout << v << ``" "``;` `        ``cout << endl;` `    ``}` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 5;` `    ``int` `K = 4;` `    ``int` `X = 5;` `    ``MEXSubarray(N, K, X);` `    ``return` `0;` `}`

## Java

 `// Java code to implement the above approach` `import` `java.util.*;`   `class` `GFG {`   `    ``// Function to create array of size N` `    ``public` `static` `void` `MEXSubarray(``int` `N, ``int` `K,` `                                   ``int` `X)` `    ``{`   `        ``// If X > K+1 then it is not` `        ``// possible to create such array` `        ``if` `(X > K + ``1``)` `            ``System.out.println(-``1``);`   `        ``// Creating array nums of size N` `        ``else` `{` `            ``int` `val = ``1``;`   `            ``// Initializing nums` `            ``int``[] nums = ``new` `int``[N];`   `            ``// Filling first K indices` `            ``for` `(``int` `i = ``0``; i < K; i++) {`   `                ``// Creating MEX in K` `                ``// sized subarray` `                ``if` `(val == X)` `                    ``nums[i] = ++val;` `                ``else` `                    ``nums[i] = val;` `                ``val++;` `            ``}`   `            ``// Filling rest of the indices` `            ``for` `(``int` `i = K; i < N; i++)` `                ``nums[i] = nums[i - K];`   `            ``// Printing Array` `            ``for` `(``int` `v : nums)` `                ``System.out.print(v + ``" "``);` `        ``}` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `N = ``5``;` `        ``int` `K = ``4``;` `        ``int` `X = ``5``;` `        ``MEXSubarray(N, K, X);` `    ``}` `}`

## Python3

 `# Python code to implement the above approach` `# Function to create array of size N` `def` `MEXSubarray(N, K, X):`   `            ``# If X > K+1 then it is not` `            ``# possible to create such array` `            ``if` `(X > K ``+` `1``):` `                ``print``(``-``1``)` `            `  `            ``# Creating array nums of size N` `            ``else``:` `                ``val ``=` `1` `                `  `            ``# Initializing nums` `            ``nums ``=` `[``0``]``*``N` `            `  `            ``# Filling first K indices` `            ``for` `i ``in` `range``(``0``, K):` `              `  `                ``# Creating MEX in K` `                ``# sized subarray` `              ``if` `(val ``=``=` `X):` `                  ``nums[i] ``=` `+``+``val` `              ``else``:` `                ``nums[i] ``=` `val` `                ``val ``=` `val ``+` `1` `                `  `            ``# Filling rest of the indices` `            ``for` `i ``in` `range``(K, N):` `                ``nums[i] ``=` `nums[i ``-` `K]` `                `  `            ``# Printing Array` `            ``for` `v ``in` `range``(``len``(nums)):` `                ``print``(nums[v], end``=``" "``)` `                `  `# Driver Code` `N ``=` `5` `K ``=` `4` `X ``=` `5` `MEXSubarray(N, K, X)`   `# This code is contributed by Taranpreet`

## C#

 `// C# code to implement the above approach` `using` `System;`   `class` `GFG {`   `  ``// Function to create array of size N` `  ``public` `static` `void` `MEXSubarray(``int` `N, ``int` `K, ``int` `X)` `  ``{`   `    ``// If X > K+1 then it is not` `    ``// possible to create such array` `    ``if` `(X > K + 1)` `      ``Console.WriteLine(-1);`   `    ``// Creating array nums of size N` `    ``else` `{` `      ``int` `val = 1;`   `      ``// Initializing nums` `      ``int``[] nums = ``new` `int``[N];`   `      ``// Filling first K indices` `      ``for` `(``int` `i = 0; i < K; i++) {`   `        ``// Creating MEX in K` `        ``// sized subarray` `        ``if` `(val == X)` `          ``nums[i] = ++val;` `        ``else` `          ``nums[i] = val;` `        ``val++;` `      ``}`   `      ``// Filling rest of the indices` `      ``for` `(``int` `i = K; i < N; i++)` `        ``nums[i] = nums[i - K];`   `      ``// Printing Array` `      ``foreach``(``int` `v ``in` `nums)` `        ``Console.Write(v + ``" "``);` `    ``}` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `Main(``string``[] args)` `  ``{` `    ``int` `N = 5;` `    ``int` `K = 4;` `    ``int` `X = 5;` `    ``MEXSubarray(N, K, X);` `  ``}` `}`   `// This code is contributed by ukasp.`

## Javascript

 ``

Output

`1 2 3 4 1 `

Time complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up
Related Articles