Remove elements from the array which appear more than k times

Given an array of integers, remove all the occurrences of those elements which appear strictly more than k times in the array.

Examples:

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

Input : arr[] = {2, 5, 5, 7}
        k = 1
Output : 2 7

Approach:



  • Take a hash map, which will store the frequency of all the elements in the array.
  • Now, traverse once again.
  • Print the elements which appear less than or equal to k times.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to remove the elements which
// appear more than k times from the array.
#include "iostream"
#include "unordered_map"
using namespace std;
  
void RemoveElements(int arr[], int n, int k)
{
    // Hash map which will store the
    // frequency of the elements of the array.
    unordered_map<int, int> mp;
  
    for (int i = 0; i < n; ++i) {
        // Incrementing the frequency
        // of the element by 1.
        mp[arr[i]]++;
    }
  
    for (int i = 0; i < n; ++i) {
        // Print the element which appear
        // less than or equal to k times.
        if (mp[arr[i]] <= k) {
            cout << arr[i] << " ";
        }
    }
}
  
int main(int argc, char const* argv[])
{
    int arr[] = { 1, 2, 2, 3, 2, 3, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    int k = 2;
  
    RemoveElements(arr, n, k);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to remove the elements which
// appear more than k times from the array.
import java.util.HashMap;
import java.util.Map;
  
class GFG 
  
static void RemoveElements(int arr[], int n, int k)
{
    // Hash map which will store the
    // frequency of the elements of the array.
    Map<Integer,Integer> mp = new HashMap<>();
  
    for (int i = 0; i < n; ++i)
    {
        // Incrementing the frequency
        // of the element by 1.
        mp.put(arr[i],mp.get(arr[i]) == null?1:mp.get(arr[i])+1);
  
    }
  
    for (int i = 0; i < n; ++i) 
    {
        // Print the element which appear
        // less than or equal to k times.
        if (mp.containsKey(arr[i]) && mp.get(arr[i]) <= k)
        {
            System.out.print(arr[i] + " ");
        }
    }
}
  
// Driver code 
public static void main(String[] args) 
{
    int arr[] = { 1, 2, 2, 3, 2, 3, 4 };
    int n = arr.length;
  
    int k = 2;
  
    RemoveElements(arr, n, k);
      
}
}
  
// This code is contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to remove the elements which
# appear more than k times from the array.
def RemoveElements(arr, n, k):
      
    # Hash map which will store the
    # frequency of the elements of the array.
    mp = {i:0 for i in range(len(arr))}
  
    for i in range(n):
          
        # Incrementing the frequency
        # of the element by 1.
        mp[arr[i]] += 1
  
    for i in range(n):
          
        # Print the element which appear
        # less than or equal to k times.
        if (mp[arr[i]] <= k):
            print(arr[i], end = " ")
  
# Driver Code    
if __name__ == '__main__':
    arr = [1, 2, 2, 3, 2, 3, 4]
    n = len(arr)
  
    k = 2
  
    RemoveElements(arr, n, k)
  
# This code is contributed by
# Sahil_Shelangia

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to remove the elements which
// appear more than k times from the array.
using System;
using System.Collections.Generic;
  
class GFG 
static void RemoveElements(int [] arr, 
                           int n, int k)
{
    // Hash map which will store the
    // frequency of the elements of the array.
    Dictionary<int
               int> mp = new Dictionary<int,
                                        int>();
  
    for (int i = 0; i < n; ++i)
    {
        // Incrementing the frequency
        // of the element by 1.
        if(mp.ContainsKey(arr[i]))
            mp[arr[i]]++;
        else
            mp[arr[i]] = 1;
    }
  
    for (int i = 0; i < n; ++i) 
    {
        // Print the element which appear
        // less than or equal to k times.
        if (mp.ContainsKey(arr[i]) && mp[arr[i]] <= k)
        {
            Console.Write(arr[i] + " ");
        }
    }
}
  
// Driver code 
static public void Main() 
{
    int [] arr = { 1, 2, 2, 3, 2, 3, 4 };
    int n = arr.Length;
  
    int k = 2;
  
    RemoveElements(arr, n, k);
}
}
  
// This code is contributed by Mohit kumar 29

chevron_right



Output:

1 3 3 4

Time Complexity – O(N)




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.