Table of Contents
Problem Statement
In the “Elements Appear more than N/K times in Array” problem we have given an integer array of size n. Find the elements which appear more than n/k times. Where k is the input value.
Input Format
The first and only one line containing two integers N and K.
Second-line containing N space-separated integers.
Output Format
The first and only one line containing all those integers with space-separated which are present in the array more than n/k times.
Constraints
- 1<=N,K<=10^5
- -10^9<=a[i]<=10^9
Example
7 6 1 3 4 7 4 7 5
4 7
Explanation: Size of the array (n) = 7, n/k = 1. Therefore, we need to find elements that are coming more than 1 time.
Therefore, output: [4, 7].
10 5 1 1 1 2 2 3 3 4 4 5
1
Explanation: Size of the array (n) =10, n/k = 2. Therefore, we need to find elements that are coming more than 2 times.
Therefore, output: [1].
Algorithm
- Traverse the whole array element by element.
- If the current element is not present in the map then add it to the map with the value 1.
- Else find the current freq of this element and add it into the map with the value freq+1.
- Traverse the whole map and check the value of each key. If the key is greater than n/k then print the key.
- Otherwise, move to the next element.
Implementation
C++ Program for Elements Appear more than N/K times in Array
#include <bits/stdc++.h> using namespace std; int main() { int n,k; cin>>n>>k; int a[n]; for(int i=0;i<n;i++) { cin>>a[i]; } int req = n/k; unordered_map<int,int> m; for(int i=0;i<n;i++) { m[a[i]]++; } for(auto u: m) { if(u.second>req) { cout<<u.first<<" "; } } cout<<endl; return 0; }
Java Program for Elements Appear more than N/K times in Array
import java.util.HashMap; import java.util.Map; import java.util.Scanner; class sum { public static void main(String[] args) { Scanner sr = new Scanner(System.in); int n = sr.nextInt(); int k = sr.nextInt(); int a[] = new int[n]; for(int i=0;i<n;i++) { a[i] = sr.nextInt(); } HashMap<Integer, Integer> m = new HashMap<Integer, Integer>(); for(int i=0;i<n;i++) { int val = m.get(a[i])== null? 0 : m.get(a[i]); m.put(a[i], val+1); } for(Map.Entry u : m.entrySet()) { int val = (int) u.getValue(); if(val > (n/k)) { System.out.print(u.getKey()+" "); } } System.out.println(); } }
7 3 3 4 3 4 3 4 1
3 4
Complexity Analysis for Elements Appear more than N/K times in Array
Time Complexity
O(n) where n is the size of the given array a[]. Here we traverse the whole array and find the freq of each element and store it in a hashmap.
Space Complexity
O(n) where n is the size of the given array a[]. Here we use the map to store the frequency of each element.