Remove elements that appear strictly less than k times

• Difficulty Level : Basic
• Last Updated : 28 May, 2021

Given an array of integers, remove all the elements which appear strictly less than k times.
Examples:

Input : arr[] = {1, 2, 2, 3, 2, 3, 4}
k = 2
Output : 2 2 3 2 3
Explanation : {1, 4} appears less than 2 times.

Approach :

• Take a hash map, which will store the frequency of all the elements in the array.
• Now, traverse once again.
• Remove the elements which appear strictly less than k times.
• Else, print it.

C++

 // C++ program to remove the elements which// appear strictly less 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 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        // more than or equal to k times.        if (mp[arr[i]] >= k) {            cout << arr[i] << " ";        }    }} int main(){    int arr[] = { 1, 2, 2, 3, 2, 3, 4 };    int n = sizeof(arr) / sizeof(arr);    int k = 2;    removeElements(arr, n, k);    return 0;}

Java

 // Java program to remove the elements which// appear strictly less than k times from the array.import java.util.HashMap; class geeks{     public static void removeElements(int[] arr,                                        int n, int k)    {                 // Hash map which will store the        // frequency of the elements of the array.        HashMap mp = new HashMap<>();         for (int i = 0; i < n; ++i)        {             // Incrementing the frequency            // of the element by 1.            if (!mp.containsKey(arr[i]))                mp.put(arr[i], 1);            else            {                int x = mp.get(arr[i]);                mp.put(arr[i], ++x);            }        }         for (int i = 0; i < n; ++i)        {                         // Print the element which appear            // more than or equal to k times.            if (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// sanjeev2552

Python3

 # Python3 program to remove the elements which# appear strictly less 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 = dict()     for i in range(n):                 # Incrementing the frequency        # of the element by 1.        mp[arr[i]] = mp.get(arr[i], 0) + 1     for i in range(n):         # Print the element which appear        # more than or equal to k times.        if (arr[i] in mp and mp[arr[i]] >= k):            print(arr[i], end = " ") # Driver Codearr = [1, 2, 2, 3, 2, 3, 4]n = len(arr)k = 2removeElements(arr, n, k) # This code is contributed by Mohit Kumar

C#

 // C# program to remove the elements which// appear strictly less than k times from the array.using System;using System.Collections.Generic;  class geeks{      public static void removeElements(int[] arr,                                        int n, int k)    {                  // Hash map which will store the        // frequency of the elements of the array.        Dictionary mp = new Dictionary();          for (int i = 0; i < n; ++i)        {              // Incrementing the frequency            // of the element by 1.            if (!mp.ContainsKey(arr[i]))                mp.Add(arr[i], 1);            else            {                int x = mp[arr[i]];                mp[arr[i]] = mp[arr[i]] + ++x;            }        }          for (int i = 0; i < n; ++i)        {                          // Print the element which appear            // more than or equal to k times.            if (mp[arr[i]] >= k)                Console.Write(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

Javascript


Output:
2 2 3 2 3

Time Complexity: O(N)

Method #2:Using Built-in Python functions:

• Count the frequencies of every element using Counter() function
• Traverse the array.
• Remove the elements which appear strictly less than k times.
• Else, print it.

Below is the implementation of the above approach:

Python3

 # Python3 program to remove the elements which# appear strictly less than k times from the array.from collections import Counter def removeElements(arr, n, k):     # Calculating frequencies using    # Counter function    freq = Counter(arr)    for i in range(n):         # Print the element which appear        # more than or equal to k times.        if (freq[arr[i]] >= k):            print(arr[i], end=" ")  # Driver Codearr = [1, 2, 2, 3, 2, 3, 4]n = len(arr)k = 2removeElements(arr, n, k) # This code is contributed by vikkycirus

Output:

2 2 3 2 3

My Personal Notes arrow_drop_up