Given a number N, the task is to create an array arr[] of size N, where the value of the element at every index i is filled according to the following rules:
- arr[i] = ((i – 1) – k), where k is the index of arr[i – 1] that has appeared second most recently. This rule is applied when arr[i – 1] is present more than once in the array
- arr[i] = 0. This rule is applied when arr[i – 1] is present only once or when i = 1.
Examples:
Input: N = 8
Output: 0 0 1 0 2 0 2 2
Explanation:
For i = 0: There is no element in the array arr[]. So, 0 is placed in the first index. arr[] = {0}.
For i = 1: There is only one element in the array arr[]. The occurrence of arr[i – 1] (= 0) is only one. Therefore, the array is filled according to the rule 2. arr = {0, 0}.
For i = 2: There are two elements in the array. The second most occurrence of arr[i – 1] = arr[0] = 0. So, arr[2] = 1. arr[] = {0, 0, 1}.
For i = 3: There is no second occurrence of arr[i – 1] = 1. Therefore, arr[3] = 0. arr[] = {0, 0, 1, 0}
For i = 4: The second recent occurrence of arr[i – 1] = 0 is 1. Therefore, (i – 1 – k) = (4 – 1 – 1) = 2. arr[] = {0, 0, 1, 0, 2}.
For i = 5: There is only one occurrence of arr[i – 1] = 2. Therefore, arr[5] = 0. arr[] = {0, 0, 1, 0, 2, 0}.
For i = 6: The second recent occurrence of arr[i – 1] = 0 is 3. Therefore, (i – 1 – k) = (6 – 1 – 3) = 2. arr[] = {0, 0, 1, 0, 2, 0, 2}.
For i = 7: The second recent occurrence of arr[i – 1] = 2 is 4. Therefore, (i – 1 – k) = (7 – 1 – 4) = 2. arr[] = {0, 0, 1, 0, 2, 0, 2, 2}
Input: N = 5
Output: 0 0 1 0 2
Approach: The idea is to first create an array filled with zeroes of size N. Then for every iteration, we search if the element has occurred in the near past. If yes, then we follow rule 1. Else, rule 2 is followed to fill the array.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int search( int a[], int k, int x)
{
int j;
for ( j = k - 1; j > -1 ; j--)
{
if (a[j] == x)
return j ;
}
return -1 ;
}
void genArray( int arr[], int N)
{
for ( int i = 0; i < N - 1; i++)
{
if (search(arr, i, arr[i]) == -1)
arr[i + 1] = 0 ;
else
arr[i + 1] = (i-search(arr, i, arr[i])) ;
}
}
int main()
{
int N = 5 ;
int size = N + 1 ;
int a[] = {0, 0, 0, 0, 0};
genArray(a, N) ;
for ( int i = 0; i < N ; i ++)
cout << a[i] << " " ;
return 0;
}
|
Java
class GFG
{
static int a[];
static int search( int a[], int k, int x)
{
int j;
for ( j = k - 1 ; j > - 1 ; j--)
{
if (a[j] == x)
return j ;
}
return - 1 ;
}
static void genArray( int []arr, int N)
{
for ( int i = 0 ; i < N - 1 ; i++)
{
if (search(arr, i, arr[i]) == - 1 )
arr[i + 1 ] = 0 ;
else
arr[i + 1 ] = (i-search(arr, i, arr[i])) ;
}
}
public static void main (String[] args)
{
int N = 5 ;
int size = N + 1 ;
int a[] = new int [N];
genArray(a, N) ;
for ( int i = 0 ; i < N ; i ++)
System.out.print(a[i]+ " " );
}
}
|
Python3
def search(a, k, x):
for j in range (k - 1 , - 1 , - 1 ) :
if (a[j] = = x):
return j
return - 1
def genArray(arr, N):
for i in range ( 0 , N - 1 , 1 ):
if (search(arr, i, arr[i]) = = - 1 ):
arr[i + 1 ] = 0
else :
arr[i + 1 ] = (i - search(arr, i, arr[i]))
if __name__ = = "__main__" :
N = 5
size = N + 1
a = [ 0 ] * N
genArray(a, N)
print (a)
|
C#
using System;
public class GFG
{
static int []a;
static int search( int []a, int k, int x)
{
int j;
for ( j = k - 1; j > -1 ; j--)
{
if (a[j] == x)
return j ;
}
return -1 ;
}
static void genArray( int []arr, int N)
{
for ( int i = 0; i < N - 1; i++)
{
if (search(arr, i, arr[i]) == -1)
arr[i + 1] = 0 ;
else
arr[i + 1] = (i-search(arr, i, arr[i])) ;
}
}
public static void Main ( string [] args)
{
int N = 5 ;
int size = N + 1 ;
int []a = new int [N];
genArray(a, N) ;
for ( int i = 0; i < N ; i ++)
Console.Write(a[i]+ " " );
}
}
|
Javascript
<script>
function search( a, k, x)
{
var j;
for ( j = k - 1; j > -1 ; j--)
{
if (a[j] == x)
return j ;
}
return -1 ;
}
function genArray(arr, N)
{
for ( var i = 0; i < N - 1; i++)
{
if (search(arr, i, arr[i]) == -1)
arr[i + 1] = 0 ;
else
arr[i + 1] = (i-search(arr, i, arr[i])) ;
}
}
var N = 5 ;
var size = N + 1 ;
var a = [0, 0, 0, 0, 0];
genArray(a, N) ;
document.write( "[" +a+ "]" );
</script>
|
Time Complexity: O(N2)
Auxiliary Space: O(1)
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
30 Nov, 2021
Like Article
Save Article