Open In App

Replace two consecutive equal values with one greater

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++ 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 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




# 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# 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 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.
?>




<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>

Output
6 4 3 6 

Complexity Analysis:


Article Tags :