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 // elements void 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 Code int 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 approach import 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 # elements def 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 Code if __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 approach using 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 neveropen!