Open In App

Remove minimum elements such that no common elements exist in two arrays

Last Updated : 24 Feb, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Given two arrays arr1[] and arr2[] consisting of n and m elements respectively. The task is to find the minimum number of elements to remove from each array such that intersection of both arrays becomes empty and both arrays become mutually exclusive.

Examples: 

Input: arr[] = { 1, 2, 3, 4}, arr2[] = { 2, 3, 4, 5, 8 }
Output: 3
Explanation: We need to remove 2, 3 and 4 from any array.

Input: arr[] = { 4, 2, 4, 4}, arr2[] = { 4, 3 }
Output: 1
Explanation: We need to remove 4 from arr2[]

Input : arr[] = { 1, 2, 3, 4 }, arr2[] = { 5, 6, 7 }
Output : 0
Explanation: There is no common element in both.

Using Two Maps – O(n+m) Time and O(n+m) Space

The idea is to use Hashing We first count the frequency of each element in both arrays using two map data structures. After counting, iterates through all elements in the first map (countA). For each element that appears in both maps, adds the minimum frequency of that element in both arrays to a result variable (res). This sum represents the minimum number of removals required to remove all common elements between the two arrays.

Below is the implementation of the above approach:

C++
// CPP program to find minimum element to remove so no common element// exist in both array#include<bits/stdc++.h>usingnamespacestd;// To find no elements to remove// so no common element existintminRemove(vector<int>&arr1,vector<int>&arr2){// To store count of array elementsunordered_map<int,int>countA,countB;// Count elements of arr1for(inti=0;i<arr1.size();i++)countA[arr1[i]]++;// Count elements of arr2for(inti=0;i<arr2.size();i++)countB[arr2[i]]++;// Traverse through all common elements, and// pick minimum occurrence from two arraysintres=0;for(autox:countA)if(countB.find(x.first)!=countB.end())res+=min(x.second,countB[x.first]);// To return count of minimum elementsreturnres;}intmain(){vector<int>arr1={1,2,3,4};vector<int>arr2={2,3,4,5,8};cout<<minRemove(arr1,arr2);return0;}
Java
// Java Code to Remove minimum number of elements// such that no common element exist in both arrayimportjava.util.HashMap;classGfG{staticintminRemove(int[]arr1,int[]arr2){HashMap<Integer,Integer>countA=newHashMap<>();HashMap<Integer,Integer>countB=newHashMap<>();intres=0;// Count elements of arr1for(intnum:arr1){countA.put(num,countA.getOrDefault(num,0)+1);}// Count elements of arr2for(intnum:arr2){countB.put(num,countB.getOrDefault(num,0)+1);}// Traverse through all common elements, and pick minimum // occurrence from two arraysfor(intkey:countA.keySet()){if(countB.containsKey(key)){res+=Math.min(countA.get(key),countB.get(key));}}returnres;}publicstaticvoidmain(String[]args){int[]arr1={1,2,3,4};int[]arr2={2,3,4,5,8};System.out.println(minRemove(arr1,arr2));}}
Python
# Python3 program to find minimum element to remove so no common # element exist in both arrayfromcollectionsimportCounterdefminRemove(arr1,arr2):countA=Counter(arr1)countB=Counter(arr2)res=0# Traverse through all common elements, and pick minimum# occurrence from two arraysforkeyincountA:ifkeyincountB:res+=min(countA[key],countB[key])returnresarr1=[1,2,3,4]arr2=[2,3,4,5,8]print(minRemove(arr1,arr2))
C#
// C# Code to Remove minimum number of elements// such that no common element exist in both arrayusingSystem;usingSystem.Collections.Generic;classGfG{staticintMinRemove(int[]arr1,int[]arr2){Dictionary<int,int>countA=newDictionary<int,int>();Dictionary<int,int>countB=newDictionary<int,int>();intres=0;// Count elements of arr1foreach(intnuminarr1){if(countA.ContainsKey(num))countA[num]++;elsecountA[num]=1;}// Count elements of arr2foreach(intnuminarr2){if(countB.ContainsKey(num))countB[num]++;elsecountB[num]=1;}// Traverse through all common elements, and pick minimum// occurrence from two arraysforeach(varkeyincountA.Keys){if(countB.ContainsKey(key)){res+=Math.Min(countA[key],countB[key]);}}returnres;}staticvoidMain(string[]args){int[]arr1={1,2,3,4};int[]arr2={2,3,4,5,8};Console.WriteLine(MinRemove(arr1,arr2));}}
JavaScript
// Javascript program to find minimum element to remove// so no common element exist in both arrayfunctionminRemove(arr1,arr2){letcountA={};letcountB={};letres=0;// Count elements of arr1for(letnumofarr1){countA[num]=(countA[num]||0)+1;}// Count elements of arr2for(letnumofarr2){countB[num]=(countB[num]||0)+1;}// Traverse through all common elements, and pick minimum// occurrence from two arraysfor(letkeyincountA){if(countB.hasOwnProperty(key)){res+=Math.min(countA[key],countB[key]);}}returnres;}constarr1=[1,2,3,4];constarr2=[2,3,4,5,8];console.log(minRemove(arr1,arr2));

Output
3

Time Complexity: O(n+m), where m and n are the length of arr1 and arr2 respectively
Auxiliary Space: O(n+m), For storing the frequency in map for both the arrays

Using Single Map – O(n+m) Time and O(n) Space

The idea is to count occurrences of elements from arr1 using a single map. Then, while iterating through arr2, we check for common elements and decrement their count, adding to the result. One map is enough because we only need to track elements from arr1 and check for their existence in arr2, avoiding redundant storage.

Below is the implementation of the above approach:

C++
// CPP program to find minimum elements to remove // so no common element exists in both arrays using a single map#include<bits/stdc++.h>usingnamespacestd;intminRemove(vector<int>&arr1,vector<int>&arr2){unordered_map<int,int>count;// Count elements of arr1for(intx:arr1){count[x]+=1;}intres=0;// Count elements of arr2 and check common elementsfor(intx:arr2){if(count.find(x)!=count.end()&&count[x]>0){count[x]--;res++;}}returnres;}intmain(){vector<int>arr1={1,2,3,4};vector<int>arr2={2,3,4,5,8};cout<<minRemove(arr1,arr2);return0;}
Java
// Java program to find minimum elements to remove // so no common element exists in both arrays using a single mapimportjava.util.HashMap;classGfG{staticintminRemove(int[]arr1,int[]arr2){HashMap<Integer,Integer>count=newHashMap<>();intres=0;// Count elements of arr1for(intnum:arr1){count.put(num,count.getOrDefault(num,0)+1);}// Count elements of arr2 and check common elementsfor(intnum:arr2){if(count.containsKey(num)&&count.get(num)>0){count.put(num,count.get(num)-1);res++;}}returnres;}publicstaticvoidmain(String[]args){int[]arr1={1,2,3,4};int[]arr2={2,3,4,5,8};System.out.println(minRemove(arr1,arr2));}}
Python
# Python3 program to find minimum elements to remove # so no common element exists in both arrays using a single mapfromcollectionsimportCounterdefminRemove(arr1,arr2):count=Counter(arr1)res=0# Count elements of arr2 and check common elementsfornuminarr2:ifcount[num]>0:count[num]-=1res+=1returnresarr1=[1,2,3,4]arr2=[2,3,4,5,8]print(minRemove(arr1,arr2))
C#
// C# program to find minimum elements to remove // so no common element exists in both arrays using a single mapusingSystem;usingSystem.Collections.Generic;classGfG{staticintMinRemove(int[]arr1,int[]arr2){Dictionary<int,int>count=newDictionary<int,int>();intres=0;// Count elements of arr1foreach(intnuminarr1){if(count.ContainsKey(num))count[num]++;elsecount[num]=1;}// Count elements of arr2 and check common elementsforeach(intnuminarr2){if(count.ContainsKey(num)&&count[num]>0){count[num]--;res++;}}returnres;}staticvoidMain(string[]args){int[]arr1={1,2,3,4};int[]arr2={2,3,4,5,8};Console.WriteLine(MinRemove(arr1,arr2));}}
JavaScript
// Javascript program to find minimum elements to remove// so no common element exists in both arrays using a single mapfunctionminRemove(arr1,arr2){letcount={};letres=0;// Count elements of arr1for(letnumofarr1){count[num]=(count[num]||0)+1;}// Count elements of arr2 and check common elementsfor(letnumofarr2){if(count[num]&&count[num]>0){count[num]--;res++;}}returnres;}constarr1=[1,2,3,4];constarr2=[2,3,4,5,8];console.log(minRemove(arr1,arr2));

Output
3

Time Complexity: O(n+m), where m and n are the length of arr1 and arr2 respectively
Auxiliary Space: O(n), as we use a map to store elements of arr1.



Next Article
Practice Tags :

Similar Reads

close