Check if two unsorted arrays (with duplicates allowed) have same elements
Last Updated :
03 Apr, 2023
Given two unsorted arrays, check whether both arrays have the same set of elements or not.
Examples:
Input : A = {2, 5, 6, 8, 10, 2, 2}
B = {2, 5, 5, 6, 8, 5, 6}
Output : No
Input : A = {2, 5, 6, 8, 2, 10, 2}
B = {2, 5, 6, 8, 2, 10, 2}
Output : Yes
Input : A = {2, 5, 8, 6, 10, 2, 2}
B = {2, 5, 6, 8, 2, 10, 2}
Output : Yes
Method 1 (Simple):
A simple solution to this problem is to check if each element of A is present in B. But this approach will lead to a wrong answer in case of multiple instances of an element is present in B. To overcome this issue, we mark visited instances of B[] using an auxiliary array visited[].
C++
#include <bits/stdc++.h>
using namespace std;
bool areSameSet(vector< int > A, vector< int > B)
{
int n = A.size();
if (B.size() != n)
return false ;
vector< bool > visited(n, false );
for ( int i = 0; i < n; i++) {
int j = 0;
for (j = 0; j < n; j++)
{
if (A[i] == B[j] && visited[j] == false )
{
visited[j] = true ;
break ;
}
}
if (j == n)
return false ;
}
return true ;
}
int main()
{
vector< int > A, B;
A.push_back(2);
A.push_back(5);
A.push_back(10);
A.push_back(6);
A.push_back(8);
A.push_back(2);
A.push_back(2);
B.push_back(2);
B.push_back(5);
B.push_back(6);
B.push_back(8);
B.push_back(10);
B.push_back(2);
B.push_back(2);
areSameSet(A, B)? cout << "Yes" : cout << "No" ;
}
|
Java
import java.util.*;
class GFG
{
static boolean areSameSet(Vector<Integer> A, Vector<Integer> B)
{
int n = A.size();
if (B.size() != n)
{
return false ;
}
Vector<Boolean> visited = new Vector<Boolean>();
for ( int i = 0 ; i < n; i++)
{
visited.add(i, Boolean.FALSE);
}
for ( int i = 0 ; i < n; i++)
{
int j = 0 ;
for (j = 0 ; j < n; j++)
{
if (A.get(i) == B.get(j) && visited.get(j) == false )
{
visited.add(j, Boolean.TRUE);
break ;
}
}
if (j == n)
{
return false ;
}
}
return true ;
}
public static void main(String[] args)
{
Vector<Integer> A = new Vector<>();
Vector<Integer> B = new Vector<>();
A.add( 2 );
A.add( 5 );
A.add( 10 );
A.add( 6 );
A.add( 8 );
A.add( 2 );
A.add( 2 );
B.add( 2 );
B.add( 5 );
B.add( 6 );
B.add( 8 );
B.add( 10 );
B.add( 2 );
B.add( 2 );
if (areSameSet(A, B))
{
System.out.println( "Yes" );
}
else
{
System.out.println( "No" );
}
}
}
|
Python3
def areSameSet(A, B):
n = len (A)
if ( len (B) ! = n):
return False
visited = [ False for i in range (n)]
for i in range (n):
j = 0
for j in range (n):
if (A[i] = = B[j] and
visited[j] = = False ):
visited[j] = True
break
if (j = = n):
return False
return True
A = []
B = []
A.append( 2 )
A.append( 5 )
A.append( 10 )
A.append( 6 )
A.append( 8 )
A.append( 2 )
A.append( 2 )
B.append( 2 )
B.append( 5 )
B.append( 6 )
B.append( 8 )
B.append( 10 )
B.append( 2 )
B.append( 2 )
if (areSameSet(A, B)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static Boolean areSameSet(List< int > A, List< int > B)
{
int n = A.Count;
if (B.Count != n)
{
return false ;
}
List<Boolean> visited = new List<Boolean>();
for ( int i = 0; i < n; i++)
{
visited.Insert(i, false );
}
for ( int i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < n; j++)
{
if (A[i] == B[j] && visited[j] == false )
{
visited.Insert(j, true );
break ;
}
}
if (j == n)
{
return false ;
}
}
return true ;
}
public static void Main(String[] args)
{
List< int > A = new List< int >();
List< int > B = new List< int >();
A.Add(2);
A.Add(5);
A.Add(10);
A.Add(6);
A.Add(8);
A.Add(2);
A.Add(2);
B.Add(2);
B.Add(5);
B.Add(6);
B.Add(8);
B.Add(10);
B.Add(2);
B.Add(2);
if (areSameSet(A, B))
{
Console.WriteLine( "Yes" );
}
else
{
Console.WriteLine( "No" );
}
}
}
|
Javascript
<script>
function areSameSet(A,B)
{
let n = A.length;
if (B.length != n)
{
return false ;
}
let visited = [];
for (let i = 0; i < n; i++)
{
visited.push( false );
}
for (let i = 0; i < n; i++)
{
let j = 0;
for (j = 0; j < n; j++)
{
if (A[i] == B[j] && visited[j] == false )
{
visited[j]= true ;
break ;
}
}
if (j == n)
{
return false ;
}
}
return true ;
}
let A=[];
let B=[];
A.push(2);
A.push(5);
A.push(10);
A.push(6);
A.push(8);
A.push(2);
A.push(2);
B.push(2);
B.push(5);
B.push(6);
B.push(8);
B.push(10);
B.push(2);
B.push(2);
if (areSameSet(A, B))
{
document.write( "Yes" );
}
else
{
document.write( "No" );
}
</script>
|
Output:
Yes
Time complexity: O(n^2).
Method 2 (Sorting):
Sort both the arrays and compare corresponding elements of each array.
C++
#include <bits/stdc++.h>
using namespace std;
bool areSameSet(vector< int > A, vector< int > B)
{
int n = A.size();
if (B.size() != n)
return false ;
sort(A.begin(), A.end());
sort(B.begin(), B.end());
for ( int i = 0; i < n; i++)
if (A[i] != B[i])
return false ;
return true ;
}
int main()
{
vector< int > A, B;
A.push_back(2);
A.push_back(5);
A.push_back(10);
A.push_back(6);
A.push_back(8);
A.push_back(2);
A.push_back(2);
B.push_back(2);
B.push_back(5);
B.push_back(6);
B.push_back(8);
B.push_back(10);
B.push_back(2);
B.push_back(2);
areSameSet(A, B)? cout << "Yes" : cout << "No" ;
}
|
Java
import java.util.*;
class GFG
{
static boolean areSameSet(Vector<Integer> A,
Vector<Integer> B)
{
int n = A.size();
if (B.size() != n)
{
return false ;
}
Collections.sort(A);
Collections.sort(B);
for ( int i = 0 ; i < n; i++)
{
if (A.get(i) != B.get(i))
{
return false ;
}
}
return true ;
}
public static void main(String[] args)
{
Vector<Integer> A = new Vector<>();
Vector<Integer> B = new Vector<>();
A.add( 2 );
A.add( 5 );
A.add( 10 );
A.add( 6 );
A.add( 8 );
A.add( 2 );
A.add( 2 );
B.add( 2 );
B.add( 5 );
B.add( 6 );
B.add( 8 );
B.add( 10 );
B.add( 2 );
B.add( 2 );
if (areSameSet(A, B))
{
System.out.println( "Yes" );
}
else
{
System.out.println( "No" );
}
}
}
|
Python3
def areSameSet(A, B):
n = len (A)
if ( len (B) ! = n):
return False
A.sort()
B.sort()
for i in range (n):
if (A[i] ! = B[i]):
return False
return True
if __name__ = = "__main__" :
A = []
B = []
A.append( 2 )
A.append( 5 )
A.append( 10 )
A.append( 6 )
A.append( 8 )
A.append( 2 )
A.append( 2 )
B.append( 2 )
B.append( 5 )
B.append( 6 )
B.append( 8 )
B.append( 10 )
B.append( 2 )
B.append( 2 )
if areSameSet(A, B):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static Boolean areSameSet(List< int > A,
List< int > B)
{
int n = A.Count;
if (B.Count!= n)
{
return false ;
}
A.Sort();
B.Sort();
for ( int i = 0; i < n; i++)
{
if (A[i] != B[i])
{
return false ;
}
}
return true ;
}
public static void Main(String[] args)
{
List< int > A = new List< int >();
List< int > B = new List< int >();
A.Add(2);
A.Add(5);
A.Add(10);
A.Add(6);
A.Add(8);
A.Add(2);
A.Add(2);
B.Add(2);
B.Add(5);
B.Add(6);
B.Add(8);
B.Add(10);
B.Add(2);
B.Add(2);
if (areSameSet(A, B))
{
Console.WriteLine( "Yes" );
}
else
{
Console.WriteLine( "No" );
}
}
}
|
Javascript
<script>
function areSameSet(A, B)
{
let n = A.length;
if (B.length != n)
{
return false ;
}
A.sort( function (a, b){ return a - b;});
B.sort( function (a, b){ return a - b;});
for (let i = 0; i < n; i++)
{
if (A[i] != B[i])
{
return false ;
}
}
return true ;
}
let A = [];
let B = [];
A.push(2);
A.push(5);
A.push(10);
A.push(6);
A.push(8);
A.push(2);
A.push(2);
B.push(2);
B.push(5);
B.push(6);
B.push(8);
B.push(10);
B.push(2);
B.push(2);
if (areSameSet(A, B))
{
document.write( "Yes" );
}
else
{
document.write( "No" );
}
</script>
|
Output:
Yes
Time Complexity: O(n*log(n)).
Method 3 (Hashing):
We can decrease the time complexity of the above problem by using a Hash table. First, we iterate through A and mark the number of instances of each element of A in a Hash Table. Then we iterate through B and decrease the corresponding value in the hash table. If in the end if all the entries of the hash table are zero, the answer will be “Yes” else “No”.
C++
#include <bits/stdc++.h>
using namespace std;
bool areSameSet(vector< int > A, vector< int > B){
int n = A.size();
if (B.size() != n)
return false ;
unordered_map< int , int > m;
for ( int i = 0; i < n; i++)
m[A[i]]++;
for ( int i = 0; i < n; i++)
m[B[i]]--;
for ( auto i : m){
if (i.second != 0){
return false ;
}
}
return true ;
}
int main(){
vector< int > A = {2, 5, 10, 6, 8, 2, 2};
vector< int > B = {2, 5, 6, 8, 10, 2, 2};
areSameSet(A, B)? cout << "Yes" : cout << "No" ;
}
|
Java
import java.util.HashMap;
class GFG
{
static boolean areSameSet( int [] A, int [] B)
{
int n = A.length;
if (B.length != n)
return false ;
HashMap<Integer,
Integer> m = new HashMap<>();
for ( int i = 0 ; i < n; i++)
m.put(A[i], m.get(A[i]) == null ? 1 :
m.get(A[i]) + 1 );
for ( int i = 0 ; i < n; i++)
m.put(B[i], m.get(B[i]) - 1 );
for (HashMap.Entry<Integer,
Integer> entry : m.entrySet())
if (entry.getValue() != 0 )
return false ;
return true ;
}
public static void main(String[] args)
{
int [] A = { 2 , 5 , 10 , 6 , 8 , 2 , 2 };
int [] B = { 2 , 5 , 6 , 8 , 10 , 2 , 2 };
if (areSameSet(A, B))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
def areSameSet(A, B):
n = len (A)
if ( len (B) ! = n):
return False
m = {}
for i in range (n):
if A[i] not in m:
m[A[i]] = 1
else :
m[A[i]] + = 1
for i in range (n):
if B[i] in m:
m[B[i]] - = 1
for i in m:
if (m[i] ! = 0 ):
return False
return True
A = []
B = []
A.append( 2 )
A.append( 5 )
A.append( 10 )
A.append( 6 )
A.append( 8 )
A.append( 2 )
A.append( 2 )
B.append( 2 )
B.append( 5 )
B.append( 6 )
B.append( 8 )
B.append( 10 )
B.append( 2 )
B.append( 2 )
if (areSameSet(A, B)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static bool areSameSet( int [] A, int [] B)
{
int n = A.Length;
if (B.Length != n)
return false ;
Dictionary< int , int > m = new Dictionary< int , int >();
for ( int i = 0; i < n; i++)
if (m.ContainsKey(A[i]))
m[A[i]] = m[A[i]] + 1;
else
m.Add(A[i], 1);
for ( int i = 0; i < n; i++)
if (m.ContainsKey(B[i]))
m[B[i]] = m[B[i]] - 1;
foreach (KeyValuePair< int , int > entry in m)
if (entry.Value != 0)
return false ;
return true ;
}
public static void Main(String[] args)
{
int [] A = { 2, 5, 10, 6, 8, 2, 2 };
int [] B = { 2, 5, 6, 8, 10, 2, 2 };
if (areSameSet(A, B))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
Javascript
<script>
function areSameSet(A,B)
{
let n = A.length;
if (B.length != n)
return false ;
let m = new Map();
for (let i = 0; i < n; i++)
m.set(A[i], m.get(A[i]) == null ? 1 :
m.get(A[i]) + 1);
for (let i = 0; i < n; i++)
m.set(B[i], m.get(B[i]) - 1);
for (let [key, value] of m.entries())
if (value != 0)
return false ;
return true ;
}
let A=[2, 5, 10, 6, 8, 2, 2 ];
let B=[2, 5, 6, 8, 10, 2, 2];
if (areSameSet(A, B))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Output:
Yes
Time Complexity: O(n), where n is the number of elements in the given vector.
Auxiliary Space: O(n)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...