You are given an array of size ‘n’. You have to replace every pair of consecutive values ‘x’ by a single value ‘x+1’ every time until there is no such repetition left and then print the new array.
Example:
Input : 5, 2, 1, 1, 2, 2
Output : 5 4
Explanation:
- step 1: While traversing, encountered pair of 1(gets replaced by 2. We get 5, 2, 2, 2, 2
- step 2: The first encountered pair of 2 gets replaced by 3. We get 5, 3, 2, 2
- step 3: Again pair of 2 gets replaced by 3. We get 5, 3, 3
- step 4: Recently formed pair of 3 gets replaced by 4. We get 5, 4
This is our required answer.
Input : 4, 5, 11, 2, 5, 7, 2
Output : 4 5 11 2 5 7 2
Approach : In this problem you have to traverse the array of integers and check if any two consecutive integers are of a same value X. Then you have to replace that pair of integers with a single integer X+1. After that you have to begin with a new step by re-traversing the array and performing the same operation.
Implementation:
C++
// C++ program to replace two elements with equal // values with one greater. #include <bits/stdc++.h> using namespace std; // Function to replace consecutive equal // elements void replace_elements( int arr[], int n) { int pos = 0; // Index in result for ( int i = 0; i < n; i++) { arr[pos++] = arr[i]; while (pos > 1 && arr[pos - 2] == arr[pos - 1]) { pos--; arr[pos - 1]++; } } // to print new array for ( int i = 0; i < pos; i++) cout << arr[i] << " " ; } // Driver Code int main() { int arr[] = { 6, 4, 3, 4, 3, 3, 5 }; int n = sizeof (arr) / sizeof ( int ); replace_elements(arr, n); return 0; } |
Java
// java program to replace two elements // with equal values with one greater. public class GFG { // Function to replace consecutive equal // elements static void replace_elements( int arr[], int n) { int pos = 0 ; // Index in result for ( int i = 0 ; i < n; i++) { arr[pos++] = arr[i]; while (pos > 1 && arr[pos - 2 ] == arr[pos - 1 ]) { pos--; arr[pos - 1 ]++; } } // to print new array for ( int i = 0 ; i < pos; i++) System.out.print( arr[i] + " " ); } // Driver code public static void main(String args[]) { int arr[] = { 6 , 4 , 3 , 4 , 3 , 3 , 5 }; int n = arr.length; replace_elements(arr, n); } } // This code is contributed by Sam007 |
Python3
# python program to replace two elements # with equal values with one greater. from __future__ import print_function # Function to replace consecutive equal # elements def replace_elements(arr, n): pos = 0 # Index in result for i in range ( 0 , n): arr[pos] = arr[i] pos = pos + 1 while (pos > 1 and arr[pos - 2 ] = = arr[pos - 1 ]): pos - = 1 arr[pos - 1 ] + = 1 # to print new array for i in range ( 0 , pos): print (arr[i], end = " " ) # Driver Code arr = [ 6 , 4 , 3 , 4 , 3 , 3 , 5 ] n = len (arr) replace_elements(arr, n) # This code is contributed by Sam007 |
C#
// C# program to replace two elements // with equal values with one greater. using System; class GFG { // Function to replace consecutive equal // elements static void replace_elements( int []arr, int n) { int pos = 0; // Index in result for ( int i = 0; i < n; i++) { arr[pos++] = arr[i]; while (pos > 1 && arr[pos - 2] == arr[pos - 1]) { pos--; arr[pos - 1]++; } } // to print new array for ( int i = 0; i < pos; i++) Console.Write( arr[i] + " " ); } // Driver code static void Main() { int []arr = { 6, 4, 3, 4, 3, 3, 5 }; int n = arr.Length; replace_elements(arr, n); } } // This code is contributed by Sam007 |
PHP
<?php // PHP program to replace two // elements with equal // values with one greater. // Function to replace consecutive // equal elements function replace_elements( $arr , $n ) { // Index in result $pos = 0; for ( $i = 0; $i < $n ; $i ++) { $arr [ $pos ++] = $arr [ $i ]; while ( $pos > 1 && $arr [ $pos - 2] == $arr [ $pos - 1]) { $pos --; $arr [ $pos - 1]++; } } // to print new array for ( $i = 0; $i < $pos ; $i ++) echo $arr [ $i ] . " " ; } // Driver Code $arr = array (6, 4, 3, 4, 3, 3, 5); $n = count ( $arr ); replace_elements( $arr , $n ); // This code is contributed by Sam007. ?> |
Javascript
<script> // JavaScript program to replace two elements with equal // values with one greater. // Function to replace consecutive equal // elements function replace_elements(arr, n) { let pos = 0; // Index in result for (let i = 0; i < n; i++) { arr[pos++] = arr[i]; while (pos > 1 && arr[pos - 2] == arr[pos - 1]) { pos--; arr[pos - 1]++; } } // to print new array for (let i = 0; i < pos; i++) document.write(arr[i] + " " ); } // Driver Code let arr = [6, 4, 3, 4, 3, 3, 5]; let n = arr.length replace_elements(arr, n); </script> |
6 4 3 6
Complexity Analysis:
- Time Complexity: O(N2)
- Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!