Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Delete array elements which are smaller than next or become smaller

  • Difficulty Level : Easy

Given an array arr[] and a number k. The task is to delete k elements which are smaller than next element (i.e., we delete arr[i] if arr[i] < arr[i+1]) or become smaller than next because next element is deleted.

Examples: 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input       : arr[] = { 3, 100, 1 }
              k = 1
Output      : 100, 1
Explanation : arr[0] < arr[1] means 3 is less than
              100, so delete 3

Input       : arr[] = {20, 10, 25, 30, 40}
              k = 2
Output      : 25 30 40
Explanation : First we delete 10 because it follows
              arr[i] < arr[i+1]. Then we delete 20
              because 25 is moved next to it and it
              also starts following the condition.

Input       : arr[] = { 23, 45, 11, 77, 18}
              k = 3
Output      : 77, 18
Explanation : We delete 23, 45 and 11 as they follow  
              the condition arr[i] < arr[i+1]

Approach: Stack is used to solving this problem. First we push arr[0] in stack S and then initialize count as 0, then after traverse a loop from 1 to n and then we check that s.top() < arr[i] if condition is true then we pop the element from stack and increase the count if count == k then we stop the loop and then store the value of stack in another array and then print that array. 

C++




// C++ program to delete elements from array.
#include <bits/stdc++.h>
using namespace std;
 
// Function for deleting k elements
void deleteElements(int arr[], int n, int k)
{
    // Create a stack and push arr[0]
    stack<int> s;
    s.push(arr[0]);
 
    int count = 0;
     
    // traversing a loop from i = 1 to n
    for (int i=1; i<n; i++) {
         
        // condition for deleting an element
        while (!s.empty() && s.top() < arr[i]
                            && count < k) {                                    
            s.pop();
            count++;
        }
         
        s.push(arr[i]);
    }
     
    // Putting elements of stack in a vector
    // from end to begin.
    int m = s.size();
    vector<int> v(m); // Size of vector is m
    while (!s.empty()) {
         
        // push element from stack to vector v
        v[--m] = s.top();
        s.pop();
    }
     
    // printing result
    for (auto x : v)
        cout << x << " ";
         
    cout << endl;
}
 
// Driver code
int main()
{
    int n = 5, k = 2;
    int arr[] = {20, 10, 25, 30, 40};
    deleteElements(arr, n, k);
    return 0;
}

Java




import java.util.*;
 
//Java program to delete elements from array.
class GFG {
 
// Function for deleting k elements
    static void deleteElements(int arr[], int n, int k) {
        // Create a stack and push arr[0]
        Stack<Integer> s = new Stack<>();
        s.push(arr[0]);
 
        int count = 0;
 
        // traversing a loop from i = 1 to n
        for (int i = 1; i < n; i++) {
 
            // condition for deleting an element
            while (!s.empty() && s.peek() < arr[i]
                    && count < k) {
                s.pop();
                count++;
            }
 
            s.push(arr[i]);
        }
 
        // Putting elements of stack in a vector
        // from end to begin.
        int m = s.size();
        Integer[] v = new Integer[m]; // Size of vector is m
        while (!s.empty()) {
 
            // push element from stack to vector v
            v[--m] = s.peek();
            s.pop();
        }
 
        // printing result
        for (Integer x : v) {
            System.out.print(x + " ");
        };
 
        System.out.println("");
    }
 
// Driver code
    public static void main(String[] args) {
        int n = 5, k = 2;
        int arr[] = {20, 10, 25, 30, 40};
        deleteElements(arr, n, k);
    }
}
// This code is contributed by PrinciRaj1992

Python3




# Function to delete elements
def deleteElements(arr, n, k):
     
    # create an empty stack st
    st = []
    st.append(arr[0])
     
    # index to maintain the top
    # of the stack
    top = 0
    count = 0
 
    for i in range(1, n):
         
        # pop till the present element
        # is greater than stack's top
        # element
        while(len(st) != 0 and count < k
                   and st[top] < arr[i]):
            st.pop()
            count += 1
            top -= 1
 
        st.append(arr[i])
        top += 1
 
    # print the remaining elements
    for i in range(0, len(st)):
        print(st[i], " ", end="")
 
# Driver code
k = 2
arr = [20, 10, 25, 30, 40]
deleteElements(arr, len(arr), k)
 
# This code is contributed by himan085.

C#




// C# program to delete elements from array.
using System;
using System.Collections.Generic;
 
class GFG {
 
    // Function for deleting k elements
    static void deleteElements(int []arr, int n, int k)
    {
        // Create a stack and push arr[0]
        Stack<int> s = new Stack<int>();
        s.Push(arr[0]);
 
        int count = 0;
 
        // traversing a loop from i = 1 to n
        for (int i = 1; i < n; i++)
        {
 
            // condition for deleting an element
            while (s.Count != 0 && s.Peek() < arr[i]
                    && count < k)
            {
                s.Pop();
                count++;
            }
 
            s.Push(arr[i]);
        }
 
        // Putting elements of stack in a vector
        // from end to begin.
        int m = s.Count;
        int[] v = new int[m]; // Size of vector is m
        while (s.Count != 0)
        {
 
            // push element from stack to vector v
            v[--m] = s.Peek();
            s.Pop();
        }
 
        // printing result
        foreach (int x in v)
        {
            Console.Write(x + " ");
        };
 
        Console.Write("");
    }
 
    // Driver code
    public static void Main()
    {
        int n = 5, k = 2;
        int []arr = {20, 10, 25, 30, 40};
        deleteElements(arr, n, k);
    }
}
 
// This code is contributed by 29AjayKumar

Javascript




<script>
 
// Javascript program to delete elements from array.
 
// Function for deleting k elements
function deleteElements(arr, n, k)
{
     
    // Create a stack and push arr[0]
    var s = [];
    s.push(arr[0]);
 
    var count = 0;
     
    // Traversing a loop from i = 1 to n
    for(var i = 1; i < n; i++)
    {
         
        // condition for deleting an element
        while (s.length != 0 && s[s.length - 1] < arr[i] &&
               count < k)
        {                                    
            s.pop();
            count++;
        }
        s.push(arr[i]);
    }
     
    // Putting elements of stack in a vector
    // from end to begin.
    var m = s.length;
    var v = Array(m).fill(0); // Size of vector is m
    while (s.length != 0)
    {
         
        // push element from stack to vector v
        m--;
        v[m] = s[s.length - 1];
        s.pop();
    }
     
    // printing result
    v.forEach(x => {
        document.write(x + " ");
    });
}
 
// Driver code
var n = 5, k = 2;
var arr = [ 20, 10, 25, 30, 40 ]
 
deleteElements(arr, n, k);
 
// This code is contributed by itsok
 
</script>
Output: 
25 30 40 

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :