Open In App

# Replace every element of the array by its next element

Given an array arr, the task is to replace each element of the array with the element that appears after it and replace the last element with -1.

Examples:

Input: arr[] = {5, 1, 3, 2, 4}
Output: 1 3 2 4 -1

Input: arr[] = {6, 8, 32, 12, 14, 10, 25 }
Output: 8 32 12 14 10 25 -1

Approach: Traverse the array from 0 to n-2 and update arr[i] = arr[i+1]. In the end, set a[n-1] = -1 and print the contents of the updated array.

Below is the implementation of the above approach:

## C++

 `// C++ program to replace every element of the array``// with the element that appears after it``#include ``using` `namespace` `std;` `// Function to print the array after replacing every element``// of the array with the element that appears after it``void` `updateArray(``int` `arr[], ``int` `n)``{``    ``// Update array``    ``for` `(``int` `i = 0; i <= n - 2; i++)``        ``arr[i] = arr[i + 1];` `    ``// Change the last element to -1``    ``arr[n - 1] = -1;` `    ``// Print the updated array``    ``for` `(``int` `i = 0; i < n; i++)``        ``cout << arr[i] << ``" "``;``}` `// Driver program``int` `main()``{``    ``int` `arr[] = { 5, 1, 3, 2, 4 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``updateArray(arr, N);``    ``return` `0;``}`

## Java

 `// Java program to replace every element``// of the array with the element that``// appears after it``class` `GFG``{` `// Function to print the array after``// replacing every element of the array``// with the element that appears after it``static` `void` `updateArray(``int` `arr[], ``int` `n)``{``    ``// Update array``    ``for` `(``int` `i = ``0``; i <= n - ``2``; i++)``        ``arr[i] = arr[i + ``1``];` `    ``// Change the last element to -1``    ``arr[n - ``1``] = -``1``;` `    ``// Print the updated array``    ``for` `(``int` `i = ``0``; i < n; i++)``        ``System.out.print(arr[i] + ``" "``);``}` `// Driver Code``public` `static` `void` `main(String []args)``{``    ``int` `arr[] = { ``5``, ``1``, ``3``, ``2``, ``4` `} ;``    ``int` `N = arr.length ;``    ``updateArray(arr, N);``}``}` `// This code is contributed by Ryuga`

## Python3

 `# Python3 program to replace every``# element of the array with the``# element that appears after it` `# Function to print the array after``# replacing every element of the``# array with the element that appears``# after it``def` `updateArray(arr, n):` `    ``# Update array``    ``for` `i ``in` `range` `(n ``-` `1``):``        ``arr[i] ``=` `arr[i ``+` `1``]` `    ``# Change the last element to -1``    ``arr[n ``-` `1``] ``=` `-``1` `    ``# Print the updated array``    ``for` `i ``in` `range``( n):``        ``print` `(arr[i], end ``=` `" "``)` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``arr ``=` `[ ``5``, ``1``, ``3``, ``2``, ``4` `]``    ``N ``=` `len``(arr)``    ``updateArray(arr, N)` `# This code is contributed``# by ChitraNayal`

## C#

 `// C# program to replace every element``// of the array with the element that``// appears after it``using` `System;` `class` `GFG``{` `// Function to print the array after``// replacing every element of the array``// with the element that appears after it``static` `void` `updateArray(``int``[] arr, ``int` `n)``{``    ``// Update array``    ``for` `(``int` `i = 0; i <= n - 2; i++)``        ``arr[i] = arr[i + 1];` `    ``// Change the last element to -1``    ``arr[n - 1] = -1;` `    ``// Print the updated array``    ``for` `(``int` `i = 0; i < n; i++)``        ``Console.Write(arr[i] + ``" "``);``}` `// Driver Code``public` `static` `void` `Main()``{``    ``int``[] arr = { 5, 1, 3, 2, 4 } ;``    ``int` `N = arr.Length ;``    ``updateArray(arr, N);``}``}` `// This code is contributed``// by Akanksha Rai`

## PHP

 ``

## Javascript

 ``

## C

 `// C program to replace every element of the array``// with the element that appears after it``#include ` `// Function to print the array after replacing every element``// of the array with the element that appears after it``void` `updateArray(``int` `arr[], ``int` `n)``{``    ``// Update array``    ``for` `(``int` `i = 0; i <= n - 2; i++)``        ``arr[i] = arr[i + 1];` `    ``// Change the last element to -1``    ``arr[n - 1] = -1;` `    ``// Print the updated array``    ``for` `(``int` `i = 0; i < n; i++)``        ``printf``(``"%d "``,arr[i]);``}` `// Driver program``int` `main()``{``    ``int` `arr[] = { 5, 1, 3, 2, 4 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``updateArray(arr, N);``    ``return` `0;``}`

Output

`1 3 2 4 -1 `

Complexity Analysis:

• Time Complexity: O(n)
• Auxiliary Space: O(1)

Approach 2: Using Stack:

The approach to solving this problem is to use a stack to keep track of the largest element seen so far while traversing the array from right to left. We initialize the stack with the last element of the array since there are no larger elements to the right of it.

Below is the step-by-step algorithm for the above approach:

• Initialize a stack and put the last element of the array into it.
• We iterate over the remaining elements of the array in reverse order. For each element, we check if it is greater than the top element of the stack. If it is, we pop the top element of the stack until we find an element that is greater than the current element or until the stack is empty. The element at the top of the stack after this process is the nearest larger element to the right of the current element. We then replace the current element in the array with the top element of the stack.
• We continue this process for all the elements in the array. At the end, we replace the last element of the array with -1 since there are no larger elements to the right of it.
• Finally, we print the modified array to the console.

Below is the code for the above approach:

## C++

 `#include ``#include ` `void` `updateArray(``int` `arr[], ``int` `n) {``    ``std::stack<``int``> st;``    ``st.push(arr[n - 1]);``    ``for` `(``int` `i = n - 2; i >= 0; --i) {``        ``int` `curr = arr[i];``        ``arr[i] = st.top();``        ``while` `(!st.empty() && curr > st.top()) {``            ``st.pop();``        ``}``        ``st.push(curr);``    ``}``    ``arr[n - 1] = -1;``    ``for` `(``int` `i = 0; i < n; ++i) {``        ``std::cout << arr[i] << ``" "``;``    ``}``}` `int` `main() {``    ``int` `arr[] = {5, 1, 3, 2, 4};``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);` `    ``updateArray(arr, N);` `    ``return` `0;``}`

## Java

 `import` `java.util.Stack;` `class` `Main {``    ``public` `static` `void` `updateArray(``int``[] arr, ``int` `n) {``        ``Stack st = ``new` `Stack<>();``        ``st.push(arr[n - ``1``]);``        ``for` `(``int` `i = n - ``2``; i >= ``0``; --i) {``            ``int` `curr = arr[i];``            ``arr[i] = st.peek();``            ``while` `(!st.empty() && curr > st.peek()) {``                ``st.pop();``            ``}``            ``st.push(curr);``        ``}``        ``arr[n - ``1``] = -``1``;``        ``for` `(``int` `i = ``0``; i < n; ++i) {``            ``System.out.print(arr[i] + ``" "``);``        ``}``    ``}` `    ``public` `static` `void` `main(String[] args) {``        ``int``[] arr = {``5``, ``1``, ``3``, ``2``, ``4``};``        ``int` `N = arr.length;` `        ``updateArray(arr, N);``    ``}``}`

## Python

 `def` `update_array(arr, n):``    ``stack ``=` `[]``    ``stack.append(arr[n ``-` `1``])``     ``# Loop through the array from the right``    ``for` `i ``in` `range``(n ``-` `2``, ``-``1``, ``-``1``):``        ``curr ``=` `arr[i]``         ``# Replace with the maximum so far``        ``arr[i] ``=` `stack[``-``1``]``        ``# Pop elements from the stack that are smaller than curr``        ``while` `stack ``and` `curr > stack[``-``1``]:``            ``stack.pop()``        ``# Add curr to the stack``        ``stack.append(curr)``    ``# Rightmost element is always -1``    ``arr[n ``-` `1``] ``=` `-``1``    ``for` `i ``in` `range``(n):``        ``# Print the updated array``        ``print``(arr[i])``#Driver Code    ``arr ``=` `[``5``, ``1``, ``3``, ``2``, ``4``]``N ``=` `len``(arr)` `update_array(arr, N)`

## Javascript

 `function` `update_array(arr, n) {``    ``let stack = [];``    ``stack.push(arr[n - 1]);``    ``// Loop through the array from the right``    ``for` `(let i = n - 2; i >= 0; i--) {``        ``let curr = arr[i];``        ``// Replace with the maximum so far``        ``arr[i] = stack[stack.length - 1];``        ``// Pop elements from the stack that are smaller than curr``        ``while` `(stack.length && curr > stack[stack.length - 1]) {``            ``stack.pop();``        ``}``        ``// Add curr to the stack``        ``stack.push(curr);``    ``}``    ``// Rightmost element is always -1``    ``arr[n - 1] = -1;``    ``for` `(let i = 0; i < n; i++) {``        ``// Print the updated array``        ``console.log(arr[i]);``    ``}``}``//Driver Code    ``let arr = [5, 1, 3, 2, 4];``let N = arr.length;` `update_array(arr, N);`

## C#

 `// C# program to replace every element``// of the array with the element that``// appears after it``using` `System;``using` `System.Collections;` `class` `GFG``{` `// Function to print the array after``// replacing every element of the array``// with the element that appears after it``static` `void` `updateArray(``int``[] arr, ``int` `n)``{``      ` `      ``Stack st = ``new` `Stack();``    ``st.Push(arr[n - 1]);``    ``for` `(``int` `i = n - 2; i >= 0; --i) {``        ``int` `curr = arr[i];``        ``arr[i] = Convert.ToInt32(st.Peek());``        ``while` `((st.Count!=0) && (curr > Convert.ToInt32(st.Peek()))) {``            ``st.Pop();``        ``}``        ``st.Push(curr);``    ``}``    ``arr[n - 1] = -1;``  ` `    ``// Print the updated array``    ``for` `(``int` `i = 0; i < n; i++)``        ``Console.Write(arr[i] + ``" "``);``  ` `}` `// Driver Code``public` `static` `void` `Main()``{``    ``int``[] arr = { 5, 1, 3, 2, 4 } ;``    ``int` `N = arr.Length ;``    ``updateArray(arr, N);``}``}``//code contributed by shubhamrajput6156`

Output

`1 3 2 4 -1 `

Complexity Analysis:

Time Complexity: O(n)
Auxiliary Space: O(n)