Count number of common elements between two arrays
Last Updated : 14 Sep, 2024
Given two arrays a[] and b[], the task is to find the count of common elements in both the given arrays. Note that both the arrays contain distinct (individually) positive integers.
Examples:
Input: a[] = {1, 2, 3}, b[] = {2, 4, 3}
Output: 2
2 and 3 are common to both the arrays.
Input: a[] = {1, 4, 7, 2, 3}, b[] = {2, 11, 7, 4, 15, 20, 24}
Output: 3
Approach 1: We will use 3 bitset of same size. First we will traverse first array and set the bit 1 to position a[i] in first bitset.
After that we will traverse second array and set the bit 1 to position b[i] in second bitset.
At last we will find the bitwise AND of both the bitsets and if the ith position of the resultant bitset is 1 then it implies that ith position of first and second bitsets are also 1 and i is the common element in both the arrays.
Below is the implementation of the above approach:
C++ // C++ implementation of the approach #include <bits/stdc++.h> using namespace std; #define MAX 100000 bitset<MAX> bit1, bit2, bit3; // Function to return the count of common elements int count_common(int a[], int n, int b[], int m) { // Traverse the first array for (int i = 0; i < n; i++) { // Set 1 at position a[i] bit1.set(a[i]); } // Traverse the second array for (int i = 0; i < m; i++) { // Set 1 at position b[i] bit2.set(b[i]); } // Bitwise AND of both the bitsets bit3 = bit1 & bit2; // Find the count of 1's int count = bit3.count(); return count; } // Driver code int main() { int a[] = { 1, 4, 7, 2, 3 }; int b[] = { 2, 11, 7, 4, 15, 20, 24 }; int n = sizeof(a) / sizeof(a[0]); int m = sizeof(b) / sizeof(b[0]); cout << count_common(a, n, b, m); return 0; }
Java /*package whatever //do not write package name here */ import java.util.*; public class GFG { static int bit1 = 0; static int bit2 = 0; static int bit3 = 0; // Function to return the count of common elements static int count_common(int[] a, int n, int[] b, int m) { // Traverse the first array for (int i = 0; i < n; i++) { // Set 1 at (index)position a[i] bit1 = bit1 | (1 << a[i]); } // Traverse the second array for (int i = 0; i < m; i++) { // Set 1 at (index)position b[i] bit2 = bit2 | (1 << b[i]); } // Bitwise AND of both the bitsets bit3 = bit1 & bit2; // Find the count of 1's int count = Integer.toBinaryString(bit3).split("1").length - 1; return count; } // Driver code public static void main(String[] args) { int[] a = { 1, 4, 7, 2, 3 }; int[] b = { 2, 11, 7, 4, 15, 20, 24 }; int n = a.length; int m = b.length; System.out.println(count_common(a, n, b, m)); } } // This code is contributed by aadityaburujwale.
Python3 # Python3 implementation of the approach MAX = 100000 bit1 , bit2, bit3 = 0, 0, 0 # Function to return the count of common elements def count_common(a, n, b, m) : # Traverse the first array for i in range(n) : global bit1, bit2, bit3 # Set 1 at (index)position a[i] bit1 = bit1 | (1<<a[i]) # Traverse the second array for i in range(m) : # Set 1 at (index)position b[i] bit2 = bit2 | (1<<b[i]) # Bitwise AND of both the bitsets bit3 = bit1 & bit2; # Find the count of 1's count = bin(bit3).count('1'); return count; # Driver code if __name__ == "__main__" : a = [ 1, 4, 7, 2, 3 ]; b = [ 2, 11, 7, 4, 15, 20, 24 ]; n = len(a); m = len(b); print(count_common(a, n, b, m)); # This code is contributed by AnkitRai01
C# // C# implementation of the approach using System; class GFG { static int bit1 = 0; static int bit2 = 0; static int bit3 = 0; // Function to return the count of common elements static int count_common(int[] a, int n, int[] b, int m) { // Traverse the first array for (int i = 0; i < n; i++) { // Set 1 at (index)position a[i] bit1 = bit1 | (1 << a[i]); } // Traverse the second array for (int i = 0; i < m; i++) { // Set 1 at (index)position b[i] bit2 = bit2 | (1 << b[i]); } // Bitwise AND of both the bitsets bit3 = bit1 & bit2; // Find the count of 1's var count = Convert.ToString(bit3, 2).Split("1").Length - 1; return count; } // Driver code public static void Main(string[] args) { int[] a = { 1, 4, 7, 2, 3 }; int[] b = { 2, 11, 7, 4, 15, 20, 24 }; int n = a.Length; int m = b.Length; Console.WriteLine(count_common(a, n, b, m)); } } // This code is contributed by phasing17
JavaScript // JavaScript implementation of the approach const MAX = 100000; let bit1 = 0; let bit2 = 0; let bit3 = 0; // Function to return the count of common elements function count_common(a, n, b, m) { // Traverse the first array for (var i = 0; i < n; i++) { // Set 1 at (index)position a[i] bit1 = bit1 | (1<<a[i]); } // Traverse the second array for (var i = 0; i < m; i++) { // Set 1 at (index)position b[i] bit2 = bit2 | (1<<b[i]); } // Bitwise AND of both the bitsets bit3 = bit1 & bit2; // Find the count of 1's var count = bit3.toString(2).split("1").length - 1; return count; } // Driver code var a = [ 1, 4, 7, 2, 3 ]; var b = [ 2, 11, 7, 4, 15, 20, 24 ]; var n = a.length; var m = b.length; console.log(count_common(a, n, b, m)); // This code is contributed by phasing17
Time Complexity: O(n + m)
Auxiliary Space: O(MAX)
Approach 2: We can also use hashmap to store frequencies of each element of both arrays a[] and b[] and sum up the minimum value for each element’s frequency.
Follow given steps to solve the problem:
1. Traverse array a[] and store all frequencies in map freq1.
2. Traverse array b[] and store all frequencies in map freq2.
3. Traverse the map freq1 and sum up the minimum value between x.second and freq2[x.first] in result.
4. Return result as the final answer.
C++14 #include <bits/stdc++.h> using namespace std; int count_common(int *a, int& n, int *b, int& m) { unordered_map<int,int>freq1,freq2; int result=0; for(int i=0;i<n;i++) freq1[a[i]]++; for(int i=0;i<m;i++) freq2[b[i]]++; for(auto& x:freq1) result+=min(x.second,freq2[x.first]); return result; } // driver's code int main() { int a[]={1,2,3}; int n=sizeof(a)/sizeof(a[0]); int b[]={2,4,3}; int m=sizeof(b)/sizeof(b[0]); cout<<count_common(a,n,b,m); return 0; } // this code is contributed by prophet1999
Java import java.util.*; public class GFG { static int count_common(int[] a, int n, int[] b, int m) { HashMap<Integer, Integer> freq1 = new HashMap<>(); HashMap<Integer, Integer> freq2 = new HashMap<>(); int result = 0; for (int i = 0; i < n; i++) { if (!freq1.containsKey(a[i])) { freq1.put(a[i], 1); } else { freq1.put(a[i], freq1.get(a[i]) + 1); } } for (int i = 0; i < m; i++) { if (!freq2.containsKey(b[i])) { freq2.put(b[i], 1); } else { freq2.put(b[i], freq2.get(b[i]) + 1); } } for (Map.Entry<Integer, Integer> x : freq1.entrySet()) { int p = x.getValue(); int q = 0; if (freq2.containsKey(x.getKey())) { q = freq2.get(x.getKey()); } result += Math.min(p, q); } return result; } // driver's code public static void main(String args[]) { int[] a = { 1, 2, 3 }; int n = a.length; int[] b = { 2, 4, 3 }; int m = b.length; System.out.print(count_common(a, n, b, m)); } } // This code is contributed by Samim Hossain Mondal.
Python def count_common(a, n, b, m): freq1 = {} freq2 = {} result = 0 for element in a: if element in freq1: freq1[element] += 1 else: freq1[element] = 1 for element in b: if element in freq2: freq2[element] += 1 else: freq2[element] = 1 for key, value in freq1.items(): if key in freq2: result += min(value, freq2.get(key)) return result # driver's code a = [1, 2, 3] n = len(a) b = [2, 4, 3] m = len(b) print(count_common(a, n, b, m)) # This code is contributed by Samim Hossain Mondal.
C# using System; using System.Collections.Generic; class GFG { static int count_common(int[] a, int n, int[] b, int m) { Dictionary<int, int> freq1 = new Dictionary<int, int>(); Dictionary<int, int> freq2 = new Dictionary<int, int>(); int result = 0; for (int i = 0; i < n; i++) { if (!freq1.ContainsKey(a[i])) { freq1.Add(a[i], 1); } else { freq1[a[i]]++; } } for (int i = 0; i < m; i++) { if (!freq2.ContainsKey(b[i])) { freq2.Add(b[i], 1); } else { freq2[b[i]]++; } } foreach(KeyValuePair<int, int> x in freq1) { int p = x.Value; int q = 0; if (freq2.ContainsKey(x.Key)) { q = freq2[x.Key]; } result += Math.Min(p, q); } return result; } // driver's code public static void Main() { int[] a = { 1, 2, 3 }; int n = a.Length; int[] b = { 2, 4, 3 }; int m = b.Length; Console.Write(count_common(a, n, b, m)); } } // This code is contributed by Samim Hossain Mondal.
JavaScript function count_common(a, n, b, m) { let freq1 = new Map(); let freq2 = new Map(); let result = 0; for(let i = 0; i < n; i++) if(freq1.has(a[i])) freq1.set(a[i], freq1.get(a[i])+1); else freq1.set(a[i], 1); for(let i = 0; i < m; i++) if(freq2.has(b[i])) freq2.set(b[i], freq2.get(b[i])+1); else freq2.set(b[i], 1); freq1.forEach((value, key) => { if(freq2.has(key)){ result += Math.min(value, freq2.get(key)); } else{ result += Math.min(value, 0); } }); return result; } // driver's code let a = [1,2,3]; let n = a.length; let b = [2,4,3]; let m = b.length; console.log(count_common(a, n, b, m)); // this code is contributed by Samim Hossain Mondal.
Time Complexity: O(n+m)
Auxiliary Space: O(n+m)
Approach 3 : We can also use Binary search to check if the element of array a present in the array b or not.
1. Sort the array b in ascending order.
2. Initialize count as 0 , which we store the number of common elements from array a and array b.
3. Iterate each element in array a and use binary search to check if the element exists in array b.
4.If the element exists in array b, increase the count by 1.
5.Return the count .
Below is the implementation of the above approach :
C++ // C++ implementation of the above approach #include <bits/stdc++.h> using namespace std; // Function to check that element x is present in the array bool binarysearch(int arr[], int m, int x) { int l = 0, r = m - 1; while (l <= r) { int mid = (l + r) / 2; // Checking if the middle element is equal to x if (arr[mid] == x) { return true; } else if (arr[mid] < x) { l = mid + 1; } else { r = mid - 1; } } // return true , if element x is present in the array // else false return false; } // Function to count common element int count_common(int a[], int n, int b[], int m) { sort(b, b + m); int count = 0; // Iterate each element of array a for (int i = 0; i < n; i++) { // Checking if the element of array a is present in // array b using the binary search function if (binarysearch(b, m, a[i])) { count++; } } // Return count of common element return count; } // Drive Code int main() { int a[] = { 1, 4, 7, 2, 3 }; int n = sizeof(a) / sizeof(a[0]); int b[] = { 2, 11, 7, 4, 15, 20, 24 }; int m = sizeof(b) / sizeof(b[0]); // Function call cout << "Number of common elements: " << count_common(a, n, b, m) << "\n"; return 0; } // This code is contributed by nikhilsainiofficial546
Java import java.util.Arrays; class GFG { // Function to check that element x is present in the // array public static boolean binarysearch(int arr[], int m, int x) { int l = 0; int r = m - 1; while (l <= r) { int mid = (l + r) / 2; // Checking if the middle element is equal to x if (arr[mid] == x) { return true; } else if (arr[mid] < x) { l = mid + 1; } else { r = mid - 1; } } // return true , if element x is present in the // array else false return false; } // Function to count common element public static int count_common(int a[], int n, int b[], int m) { Arrays.sort(b); int count = 0; // Iterate each element of array a for (int i = 0; i < n; i++) { // Checking if the element of array a is // present in array b using the binary search // function if (binarysearch(b, m, a[i])) { count++; } } // Return count of common element return count; } // Drive Code public static void main(String[] args) { int a[] = { 1, 4, 7, 2, 3 }; int n = a.length; int b[] = { 2, 11, 7, 4, 15, 20, 24 }; int m = b.length; // Function call System.out.println("Number of common elements: " + count_common(a, n, b, m)); } } // This code is contributed by phasing17.
Python # python3 implementation of the above approach # Function to check that element x is present in the array def binarysearch(arr, m, x): l, r = 0, m - 1 while l <= r: mid = (l + r) // 2 # Checking if the middle element is equal to x if arr[mid] == x: return True elif arr[mid] < x: l = mid + 1 else: r = mid - 1 # return true , if element x is present in the array # else false return False # Function to count common element def count_common(a, n, b, m): b.sort() count = 0 # Iterate each element of array a for i in range(n): # Checking if the element of array a is present in # array b using the binary search function if binarysearch(b, m, a[i]): count += 1 # Return count of common element return count # Drive Code a = [1, 4, 7, 2, 3] n = len(a) b = [2, 11, 7, 4, 15, 20, 24] m = len(b) # Function call print("Number of common elements:", count_common(a, n, b, m)) # This code is contributed by nikhilsainiofficial546
C# // C# program to count common elements in two arrays using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class GFG { static void Main(string[] args) { int[] a = new int[] { 1, 4, 7, 2, 3 }; int n = a.Length; int[] b = new int[] { 2, 11, 7, 4, 15, 20, 24 }; int m = b.Length; // Function call Console.WriteLine("Number of common elements: " + count_common(a, n, b, m)); Console.ReadLine(); } // Function to count common element public static int count_common(int[] a, int n, int[] b, int m) { Array.Sort(b); int count = 0; // Iterate each element of array a for (int i = 0; i < n; i++) { // Checking if the element of array a is // present in array b using the binary search // function if (binarysearch(b, m, a[i])) { count++; } } // Return count of common element return count; } // Function to check that element x is present in the // array public static bool binarysearch(int[] arr, int m, int x) { int l = 0; int r = m - 1; while (l <= r) { int mid = (l + r) / 2; // Checking if the middle element is equal to x if (arr[mid] == x) { return true; } else if (arr[mid] < x) { l = mid + 1; } else { r = mid - 1; } } // return true , if element x is present in the // array else false return false; } } // This code is contributed by phasing17.
JavaScript // JavaScript implementation of the above approach // Function to check that element x is present in the array function binarysearch(arr, m, x) { let l = 0; let r = m - 1; while (l <= r) { let mid = Math.floor((l + r) / 2); // Checking if the middle element is equal to x if (arr[mid] === x) { return true; } else if (arr[mid] < x) { l = mid + 1; } else { r = mid - 1; } } // return true , if element x is present in the array // else false return false; } // Function to count common element function count_common(a, n, b, m) { a.sort(function(x, y) { return x - y; }); b.sort(function(x, y) { return x - y; }); let count = 0; // Iterate each element of array a for (let i = 0; i < n; i++) { // Checking if the element of array a is present in // array b using the binary search function if (binarysearch(b, m, a[i])) { count++; } } // Return count of common element return count; } // Drive Code let a = [1, 4, 7, 2, 3]; let n = a.length; let b = [2, 11, 7, 4, 15, 20, 24]; let m = b.length; // Function call console.log("Number of common elements:", count_common(a, n, b, m)); // This code is contributed by phasing17
OutputNumber of common elements: 3
Time Complexity: O(mlogm + nlogm)
Auxiliary Space: O(m)
Similar Reads
Count number of elements between two given elements in array
Given an unsorted array of n elements and also given two points num1 and num2. The task is to count number of elements occurs between the given points (excluding num1 and num2). If there are multiple occurrences of num1 and num2, we need to consider leftmost occurrence of num1 and rightmost occurren
7 min read
Count number of common elements between a sorted array and a reverse sorted array
Given two arrays consisting of N distinct integers such that the array A[] and B[] are sorted in ascending and descending order respectively, the task is to find the number of values common in both arrays. Examples: Input: A[] = {1, 10, 100}, B[] = {200, 20, 2}Output: 0 Input: A[] = {2, 4, 5, 8, 12,
15+ min read
Minimize count of unequal elements at corresponding indices between given arrays
Given two arrays A[] and B[] consisting of N positive integers and a matrix List[][] consisting of M pairs of indices, the task is to minimize the count of unequal same-indexed elements(Ai != Bi) from the two arrays by swapping between any pair of given indices in array A[]. Examples: Input: N = 5,
12 min read
Find Common Elements in Two Arrays in Python
Given two arrays arr1[] and arr2[], the task is to find all the common elements among them. Examples: Input: arr1[] = {1, 2, 3, 4, 5}, arr2[] = {3, 4, 5, 6, 7}Output: 3 4 5Explanation: 3, 4 and 5 are common to both the arrays. Input: arr1: {2, 4, 0, 5, 8}, arr2: {0, 1, 2, 3, 4}Output: 0 2 4Explanati
8 min read
Intersection of Two Arrays with Distinct Elements
Given two arrays a[] and b[] with distinct elements of size n and m respectively, the task is to find intersection (or common elements) of the two arrays. We can return the answer in any order. Note: Intersection of two arrays can be defined as a set containing distinct common elements between the t
9 min read
Count of distinct pair sum between two 1 to N value Arrays
Given a positive integer N such that there exists two arrays a[] and b[] each containing values {1, 2, 3, .., N}, the task is to find the count of all pairs (a[i], b[j]) such that a[i] + b[j] is unique among all the pairs i.e. if two pairs have equal sum then only one will be counted in the result.E
6 min read
Count of pairs containing even or consecutive elements from given Array
Given an array arr[] of even size, the task is to find the count of pairs after partitioning arr[] into pairs, such that: each element of arr[] belongs to exactly one pairboth of them are even orabsolute difference between them is 1, i.e, |X - Y| = 1. Examples: Input: arr[] = {11, 12, 16, 14}Output:
12 min read
Find common elements in three sorted arrays
Given three sorted arrays in non-decreasing order, print all common elements in non-decreasing order across these arrays. If there are no such elements return an empty array. In this case, the output will be -1. Note: In case of duplicate common elements, print only once. Examples: Input: arr1[] = [
12 min read
Find distinct elements common to all rows of a matrix
Given a n x n matrix. The problem is to find all the distinct elements common to all rows of the matrix. The elements can be printed in any order. Examples: Input : mat[][] = { {2, 1, 4, 3}, {1, 2, 3, 2}, {3, 6, 2, 3}, {5, 2, 5, 3} } Output : 2 3 Input : mat[][] = { {12, 1, 14, 3, 16}, {14, 2, 1, 3,
15+ min read
Union of Two Arrays with Distinct Elements
Given two arrays a[] and b[] with distinct elements, the task is to return union of both the arrays in any order. Note: Union of two arrays is an array having all distinct elements that are present in either array. Examples: Input: a[] = {1, 2, 3}, b[] = {5, 2, 7}Output: {1, 2, 3, 5, 7}Explanation:
7 min read