Given two arrays (which may or may not be sorted) of sizes M and N respectively. Their arrays are such that they might have some common elements in them. You need to count the number of elements whose occurrences are more in the first array than second.
Examples:
Input : arr1[] = {41, 43, 45, 50}, M = 4, arr2[] = {55, 67, 65, 61, 62}, N = 5
Output : 4
Explanation:
arr1[] contains 41, 43, 45, 50 with frequency all having 1
arr2[] does not contain any such element which is common in both hence count will be 4
Input : arr1[] = {40, 45, 56, 60}, M = 4, arr2[] = {40, 45, 56, 58}, N = 4
Output: 1
Explanation:
arr1[] contains 40, 45, 56, 60 with frequency all having 1
arr2[] contains 3 elements in common with arr1[] which are 40, 45, 56
but not 60 hence count becomes 1
The idea is to use a hash map and keep the count of frequency of numbers in the first array. While traversing the second array reduce the count in the map for every integer encountered. Now count the elements whose frequency is more than 0 otherwise return 0.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
int Largercount( int arr1[], int arr2[], int m, int n)
{
bool f = false ;
int count = 0;
unordered_map< int , int > mp;
for ( int i = 0; i < m; i++)
mp[arr1[i]]++;
for ( int i = 0; i < n; i++)
if (mp.find(arr2[i]) != mp.end() && mp[arr2[i]] != 0)
mp[arr2[i]]--;
for ( int i = 0; i < m; i++) {
if (mp[arr1[i]] != 0) {
count++;
mp[arr1[i]] = 0;
}
}
return count;
}
int main()
{
int arr1[] = { 2, 4, 4, 6, 6, 6, 8, 9 };
int arr2[] = { 2, 2, 4, 6, 6 };
cout << Largercount(arr1, arr2, 8, 5);
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG {
public static int Largercount( int arr1[], int arr2[], int m, int n)
{
int count = 0 ;
HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();
for ( int i = 0 ; i < m; i++) {
int key = arr1[i];
if (mp.containsKey(key)) {
int freq = mp.get(key);
freq++;
mp.put(key, freq);
}
else
mp.put(key, 1 );
}
for ( int i = 0 ; i < n; i++) {
if (mp.containsKey(arr2[i]) && mp.get(arr2[i]) != 0 ) {
int freq = mp.get(arr2[i]);
freq--;
mp.put(arr2[i], freq);
}
}
for ( int i = 0 ; i < m; i++) {
if (mp.get(arr1[i]) != 0 ) {
count++;
mp.put(arr1[i], 0 );
}
}
return count;
}
public static void main(String[] args)
{
int arr1[] = new int [] { 2 , 4 , 4 , 6 , 6 , 6 , 8 , 9 };
int arr2[] = new int [] { 2 , 2 , 4 , 6 , 6 };
System.out.print(Largercount(arr1, arr2, 8 , 5 ));
}
}
|
Python3
def Largercount(arr1, arr2, m, n):
count = 0
mp = dict ()
for i in range (m):
mp[arr1[i]] = mp.get(arr1[i], 0 ) + 1
for i in range (n):
if (arr2[i] in mp.keys() and
mp[arr2[i]] ! = 0 ):
mp[arr2[i]] - = 1
for i in range (m):
if (mp[arr1[i]] ! = 0 ):
count + = 1
mp[arr1[i]] = 0
return count
arr1 = [ 2 , 4 , 4 , 6 , 6 , 6 , 8 , 9 ]
arr2 = [ 2 , 2 , 4 , 6 , 6 ]
print (Largercount(arr1, arr2, 8 , 5 ))
|
C#
using System;
using System.Collections.Generic;
class GFG
{
public static int Largercount( int [] arr1,
int [] arr2,
int m, int n)
{
int count = 0;
Dictionary< int ,
int > mp = new Dictionary< int ,
int >();
for ( int i = 0; i < m; i++)
{
int key = arr1[i];
if (mp.ContainsKey(key))
{
int freq = mp[key];
freq++;
mp[key] = freq;
}
else
{
mp[key] = 1;
}
}
for ( int i = 0; i < n; i++)
{
if (mp.ContainsKey(arr2[i]) &&
mp[arr2[i]] != 0)
{
int freq = mp[arr2[i]];
freq--;
mp[arr2[i]] = freq;
}
}
for ( int i = 0; i < m; i++)
{
if (mp[arr1[i]] != 0)
{
count++;
mp[arr1[i]] = 0;
}
}
return count;
}
public static void Main( string [] args)
{
int [] arr1 = new int [] {2, 4, 4, 6,
6, 6, 8, 9};
int [] arr2 = new int [] {2, 2, 4, 6, 6};
Console.Write(Largercount(arr1, arr2, 8, 5));
}
}
|
Javascript
<script>
function Largercount(arr1,arr2,m,n)
{
let count = 0;
let mp = new Map();
for (let i = 0; i < m; i++) {
let key = arr1[i];
if (mp.has(key)) {
let freq = mp.get(key);
freq++;
mp.set(key, freq);
}
else
mp.set(key, 1);
}
for (let i = 0; i < n; i++) {
if (mp.has(arr2[i]) && mp.get(arr2[i]) != 0) {
let freq = mp.get(arr2[i]);
freq--;
mp.set(arr2[i], freq);
}
}
for (let i = 0; i < m; i++) {
if (mp.get(arr1[i]) != 0) {
count++;
mp.set(arr1[i], 0);
}
}
return count;
}
let arr1=[2, 4, 4, 6, 6, 6, 8, 9];
let arr2=[2, 2, 4, 6, 6 ];
document.write(Largercount(arr1, arr2, 8, 5));
</script>
|
Time complexity: O(m + n)
Auxiliary Space: O(m + n)