Find the next non-zero Array element to the right of each array element

Given an array arr[] of N integers, the task is to find the next non-zero array element to the right of every array element. If there doesn’t exist any non-zero element, then print that element itself.
Examples:
Input: arr[] = {1, 2, 0}
Output: {2, 2, 0}
Explanation:
For each array element the next non-zero elements are:
arr[0] = 1 -> 2
arr[1] = 2 -> 2(as there doesn’t exist any non-zero element)
arr[2] = 0 -> 0(as there doesn’t exist any non-zero element)Input: arr[] = {1, 0, 0, 3}
Output: {3, 3, 3, 3}
Approach: The simple approach to this problem is to traverse the given array from the end, keep track of the variable for each non-zero element obtained while traversing, and replace the integer in the array with that variable. Follow the below steps to solve the given problem:
- Create a variable, say tempValid, to keep track of the valid integer and initialize it to -1.
- Create an array result[] that stores the next non-zero array element to the right of every array element.
- Iterate the array from the end from index N – 1 to 0 and if the value of tempValid is -1, then assign the next non-zero element for the current index as the number itself i.e., arr[i]. Otherwise, update the value of result[i] as tempValid.
- After completing the above steps, print the array result[] as the result.
Below is the implementation of the above approach:
C++
// C++ program for the above approach#include <bits/stdc++.h>using namespace std;// Function to find the next non-zero// element to the right of each array// elementsvoid NextValidInteger(int arr[], int N){ // Stores the resultant array int result[N]; // Keeps the track of next non-zero // element for each array element int tempValid = -1; // Iterate the array from right to left // and update tempValid for (int i = N - 1; i >= 0; i--) { // If tempValid is -1, the valid // number at current index is the // number itself if (tempValid == -1) { result[i] = arr[i]; } else { result[i] = tempValid; } // Update tempValid if the // current element is non-zero if (arr[i] != 0) { tempValid = arr[i]; } } // Print the result for (int i = 0; i < N; i++) { cout << result[i] << " "; }}// Driver Codeint main(){ int arr[] = { 1, 2, 0, 2, 4, 5, 0 }; int N = sizeof(arr) / sizeof(arr[0]); NextValidInteger(arr, N); return 0;} |
Java
// Java program for the above approachimport java.io.*;import java.util.*;class GFG { // Function to find the next non-zero // element to the right of each array // elements static void NextValidInteger(int arr[], int N) { // Stores the resultant array int result[] = new int[N]; // Keeps the track of next non-zero // element for each array element int tempValid = -1; // Iterate the array from right to left // and update tempValid for (int i = N - 1; i >= 0; i--) { // If tempValid is -1, the valid // number at current index is the // number itself if (tempValid == -1) { result[i] = arr[i]; } else { result[i] = tempValid; } // Update tempValid if the // current element is non-zero if (arr[i] != 0) { tempValid = arr[i]; } } // Print the result for (int i = 0; i < N; i++) { System.out.print(result[i] + " "); } } // Driver Code public static void main(String[] args) { int arr[] = { 1, 2, 0, 2, 4, 5, 0 }; int N = 7; NextValidInteger(arr, N); }}// This code is contributed by dwivediyash |
Python3
# python program for the above approach# Function to find the next non-zero# element to the right of each array# elementsdef NextValidInteger(arr, N): # Stores the resultant array result = [0 for _ in range(N)] # Keeps the track of next non-zero # element for each array element tempValid = -1 # Iterate the array from right to left # and update tempValid for i in range(N-1, -1, -1): # If tempValid is -1, the valid # number at current index is the # number itself if (tempValid == -1): result[i] = arr[i] else: result[i] = tempValid # Update tempValid if the # current element is non-zero if (arr[i] != 0): tempValid = arr[i] # Print the result for i in range(0, N): print(result[i], end=" ")# Driver Codeif __name__ == "__main__": arr = [1, 2, 0, 2, 4, 5, 0] N = len(arr) NextValidInteger(arr, N)# This code is contributed by rakeshsahni |
C#
// C# program for the above approachusing System;class GFG { // Function to find the next non-zero // element to the right of each array // elements static void NextValidInteger(int[] arr, int N) { // Stores the resultant array int[] result = new int[N]; // Keeps the track of next non-zero // element for each array element int tempValid = -1; // Iterate the array from right to left // and update tempValid for (int i = N - 1; i >= 0; i--) { // If tempValid is -1, the valid // number at current index is the // number itself if (tempValid == -1) { result[i] = arr[i]; } else { result[i] = tempValid; } // Update tempValid if the // current element is non-zero if (arr[i] != 0) { tempValid = arr[i]; } } // Print the result for (int i = 0; i < N; i++) { Console.Write(result[i] + " "); } } // Driver Code public static void Main() { int[] arr = { 1, 2, 0, 2, 4, 5, 0 }; int N = 7; NextValidInteger(arr, N); }}// This code is contributed by Saurabh |
Javascript
<script> // JavaScript Program to implement // the above approach // Function to find the next non-zero // element to the right of each array // elements function NextValidInteger(arr, N) { // Stores the resultant array let result = new Array(N); // Keeps the track of next non-zero // element for each array element let tempValid = -1; // Iterate the array from right to left // and update tempValid for (let i = N - 1; i >= 0; i--) { // If tempValid is -1, the valid // number at current index is the // number itself if (tempValid == -1) { result[i] = arr[i]; } else { result[i] = tempValid; } // Update tempValid if the // current element is non-zero if (arr[i] != 0) { tempValid = arr[i]; } } // Print the result for (let i = 0; i < N; i++) { document.write(result[i] + " "); } } // Driver Code let arr = [1, 2, 0, 2, 4, 5, 0]; let N = arr.length; NextValidInteger(arr, N);// This code is contributed by Potta Lokesh </script> |
2 2 2 4 5 5 0
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



