Skip to content
Related Articles

Related Articles

Replace two consecutive equal values with one greater
  • Difficulty Level : Medium
  • Last Updated : 11 Jun, 2018

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.

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.

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.
?>
Output:
6 4 3 6



My Personal Notes arrow_drop_up
Recommended Articles
Page :