Java Program to find all the elements that appear more than ” n/k ” times.
Elements that appear more than “n/k” times in Java
Here, on this page, we will discuss the program to find all the elements that appear more than “n/k” times in Java. We are given an array of size n, find all elements in the array that appear more than n/k times.
Example :
- Input : arr[ ] : {3, 1, 2, 2, 1, 2, 3, 3} and k = 4,
- Output : 2, 3
- Explanation: As, size of array i.e, n = 8 so, n/k => 2 and in the given input array 2 and 3 occur 3 and 3 times respectively.
Method 1 (Brute force Approach) :
In this approach we will discuss the naive approach to solve this problem.
- Iterate over the array and count its frequency.
- If count is more than n/k times then print that element.
- Now, here we need to handle the duplicate printing, so for that make every j-th element to -1 (Here, we are assuming that array will contain only positive elements).
Code to find all Elements that appear more than " n/k " times in Java
Run
import java.util.*; public class Main { public static void morethanNdK(int a[], int n, int k) { int x = n / k; // Hash map initialization HashMap<Integer, Integer> y = new HashMap<>(); // count the frequency of each element. for (int i = 0; i < n; i++) { // is element doesn't exist in hash table if (!y.containsKey(a[i])) y.put(a[i], 1); // if element does exist in the hash table else { int count = y.get(a[i]); y.put(a[i], count + 1); } } for (Map.Entry m : y.entrySet()) { Integer temp = (Integer)m.getValue(); if (temp > x) System.out.println(m.getKey()); } } // Driver Code public static void main(String[] args) { int a[] = new int[]{1, 1, 2, 2, 3, 5, 4, 2, 2, 3, 1, 1, 1}; int n = 12; int k = 4; morethanNdK(a, n, k); } }
1
2
Time and Space complexity of above approach
Time - complexity : O(n^2)
Space-complexity - O(1)
Method 2 (Using Hash-map)
In this approach we will discuss the efficient approach . We will use map to store the frequency of the element.
- Declare a hash map.
- Iterate over the array and increase that value in map by 1.
- Now, iterate over the map and check if frequency is found to be greater than n / k, then print that key value.
Time and Space complexity
Time and Space complexity of above approach
Time - complexity : O(n )
Space-complexity - O(n)
Run
import java.util.*; public class Main { public static void morethanNdK(int a[], int n, int k) { int x = n / k; HashMap<Integer, Integer> y = new HashMap<>(); // count the frequency of each element. for (int i = 0; i < n; i++) { // is element doesn't exist in hash table if (!y.containsKey(a[i])) y.put(a[i], 1); // if lement does exist in the hash table else { int count = y.get(a[i]); y.put(a[i], count + 1); } } for (Map.Entry m : y.entrySet()) { Integer temp = (Integer)m.getValue(); if (temp > x) System.out.println(m.getKey()); } } // Driver Code public static void main(String[] args) { int a[] = new int[]{1, 1, 2, 2, 3, 5, 4, 2, 2, 3, 1, 1, 1}; int n = 12; int k = 4; morethanNdK(a, n, k); } }
1 2
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Login/Signup to comment