Given an integer array, if an integer is repeating then replace it with a number greater than that number that has not been inserted yet in the array.
Examples:
Input : arr = {1, 3, 4, 5, 3}
Output : 1 3 4 5 6
Explanation: Here 3 is repeating so it is replaced with 6Input : arr = {1, 3, 4, 4, 5, 3}
Output : 1 3 4 6 5 7
We need to replace repeating numbers with a number that does not appear in the array and is one greater than the largest present in the array.
Source: Paytm Interview Experience (Backend Developer).
Calculate the maximum element in the array and replace the repeated elements with the maxx+1 and update the maxx element as visited. In the implementation, basic concept of hashing is used.
Implementation:
// CPP program to replace repeating elements // with greater than the greatest. #include <bits/stdc++.h> using namespace std;
void replaceElements( int arr[], int n)
{ // Maximum element in an array
int maxx = *max_element(arr, arr+n);
unordered_set< int > s;
for ( int i = 0; i < n; i++) {
// check whether the element is
// repeated or not
if (s.find(arr[i]) == s.end())
s.insert(arr[i]);
else {
// update the repeated element with the
// maxx element
arr[i] = maxx + 1;
maxx++; // update the max
// mark the maximum element as visited
s.insert(maxx);
}
}
} // Driver code int main()
{ int arr[] = { 1, 3, 4, 5, 3 };
int n = sizeof (arr)/ sizeof (arr[0]);
replaceElements(arr, n);
for ( int i = 0; i < n; i++)
cout << arr[i] << " " ;
return 0;
} |
// Java program to replace repeating elements // with greater than the greatest. import java.util.*;
class Solution
{ //returns the maximum element
static int max_element( int arr[])
{
int max=arr[ 0 ];
for ( int i= 1 ;i<arr.length;i++)
{
if (max<arr[i])
max=arr[i];
}
return max;
}
static void replaceElements( int arr[], int n)
{ // Maximum element in an array
int maxx = max_element(arr);
Vector<Integer> s= new Vector<Integer>();
for ( int i = 0 ; i < n; i++) {
// check whether the element is
// repeated or not
if (!s.contains(arr[i]))
s.add(arr[i]);
else {
// update the repeated element with the
// maxx element
arr[i] = maxx + 1 ;
maxx++; // update the max
// mark the maximum element as visited
s.add(maxx);
}
}
} // Driver code public static void main(String args[])
{ int arr[] = { 1 , 3 , 4 , 5 , 3 };
int n = arr.length;
replaceElements(arr, n);
for ( int i = 0 ; i < n; i++)
System.out.print( arr[i] + " " );
} } //contributed by Arnab Kundu |
# Python 3 program to replace repeating # elements with greater than the greatest. def replaceElements( arr, n):
# Maximum element in an array
maxx = max (arr)
s = []
for i in range (n) :
# check whether the element is
# repeated or not
if arr[i] not in s:
s.append(arr[i])
else :
# update the repeated element
# with the maxx element
arr[i] = maxx + 1
maxx + = 1 # update the max
# mark the maximum element
# as visited
s.append(maxx)
# Driver code if __name__ = = "__main__" :
arr = [ 1 , 3 , 4 , 5 , 3 ]
n = len (arr)
replaceElements(arr, n)
for i in range ( n):
print (arr[i], end = " " )
# This code is contributed by ita_c |
// C# program to replace repeating elements // with greater than the greatest. using System;
using System.Collections.Generic;
class GFG
{ //returns the maximum element
static int max_element( int []arr)
{
int max = arr[0];
for ( int i = 1; i < arr.Length; i++)
{
if (max < arr[i])
max = arr[i];
}
return max;
}
static void replaceElements( int []arr, int n)
{ // Maximum element in an array
int maxx = max_element(arr);
List< int > s = new List< int >();
for ( int i = 0; i < n; i++)
{
// check whether the element is
// repeated or not
if (!s.Contains(arr[i]))
s.Add(arr[i]);
else
{
// update the repeated element with the
// maxx element
arr[i] = maxx + 1;
maxx++; // update the max
// mark the maximum element as visited
s.Add(maxx);
}
}
} // Driver code public static void Main()
{ int []arr = { 1, 3, 4, 5, 3 };
int n = arr.Length;
replaceElements(arr, n);
for ( int i = 0; i < n; i++)
Console.Write( arr[i] + " " );
} } // This code is contributed by PrinciRaj1992 |
<script> // JavaScript program to replace repeating elements // with greater than the greatest. //returns the maximum element
function max_element(arr)
{
let max=arr[0];
for (let i=1;i<arr.length;i++)
{
if (max<arr[i])
max=arr[i];
}
return max;
}
function replaceElements(arr,n)
{
// Maximum element in an array
let maxx = max_element(arr);
let s=[];
for (let i = 0; i < n; i++) {
// check whether the element is
// repeated or not
if (!s.includes(arr[i]))
s.push(arr[i]);
else {
// update the repeated element with the
// maxx element
arr[i] = maxx + 1;
maxx++; // update the max
// mark the maximum element as visited
s.push(maxx);
}
}
}
// Driver code
let arr=[1, 3, 4, 5, 3];
let n = arr.length;
replaceElements(arr, n);
for (let i = 0; i < n; i++)
document.write( arr[i] + " " );
// This code is contributed by rag2127 </script> |
1 3 4 5 6
Time complexity: O(n) where n is the number of elements in the given array
Auxiliary space: O(n) for storing elements in the HashSet.