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++
// C++ implementation of the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to check if both arrays are same
bool areSameSet(vector<int> A, vector<int> B)
{
int n = A.size();
if (B.size() != n)
return false;
// visited array is used to handle duplicates
vector<bool> visited(n, false);
// each element of A is matched
// against each element of B
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 we could not find A[i] in B[]
if (j == n)
return false;
}
return true;
}
// Driver code
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
// Java implementation of the above approach
import java.util.*;
class GFG
{
// Function to check if both arrays are same
static boolean areSameSet(Vector<Integer> A, Vector<Integer> B)
{
int n = A.size();
if (B.size() != n)
{
return false;
}
// visited array is used to handle duplicates
Vector<Boolean> visited = new Vector<Boolean>();
for (int i = 0; i < n; i++)
{
visited.add(i, Boolean.FALSE);
}
// each element of A is matched
// against each element of B
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 we could not find A[i] in B[]
if (j == n)
{
return false;
}
}
return true;
}
// Driver code
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");
}
}
}
/* This code contributed by PrinciRaj1992 */
Python3
# Python3 implementation of the above approach
# Function to check if both arrays are same
def areSameSet(A, B):
n = len(A)
if (len(B) != n):
return False
# visited array is used to handle duplicates
visited = [False for i in range(n)]
# each element of A is matched
# against each element of B
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 we could not find A[i] in B[]
if (j == n):
return False
return True
# Driver code
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")
# This code is contributed
# by mohit kumar
C#
// C# implementation of the above approach
using System;
using System.Collections.Generic;
class GFG
{
// Function to check if both arrays are same
static Boolean areSameSet(List<int> A, List<int> B)
{
int n = A.Count;
if (B.Count != n)
{
return false;
}
// visited array is used to handle duplicates
List<Boolean> visited = new List<Boolean>();
for (int i = 0; i < n; i++)
{
visited.Insert(i, false);
}
// each element of A is matched
// against each element of B
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 we could not find A[i] in B[]
if (j == n)
{
return false;
}
}
return true;
}
// Driver code
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");
}
}
}
// This code has been contributed by 29AjayKumar
JavaScript
<script>
// Javascript implementation of the above approach
// Function to check if both arrays are same
function areSameSet(A,B)
{
let n = A.length;
if (B.length != n)
{
return false;
}
// visited array is used to handle duplicates
let visited = [];
for (let i = 0; i < n; i++)
{
visited.push(false);
}
// each element of A is matched
// against each element of B
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 we could not find A[i] in B[]
if (j == n)
{
return false;
}
}
return true;
}
// Driver code
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");
}
// This code is contributed by patel2127
</script>
Output:
Yes
Time complexity: O(n^2).
Method 2 (Sorting):
Sort both the arrays and compare corresponding elements of each array.
C++
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Function to check if both arrays are same
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());
// Compare corresponding elements
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
// Java implementation of the approach
import java.util.*;
class GFG
{
// Function to check if both arrays are same
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);
// Compare corresponding elements
for (int i = 0; i < n; i++)
{
if (A.get(i) != B.get(i))
{
return false;
}
}
return true;
}
// Driver code
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");
}
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 implementation of the approach
# Function to check if
# both arrays are same
def areSameSet(A, B):
n = len(A)
if (len(B) != n):
return False
A.sort()
B.sort()
# Compare corresponding
# elements
for i in range (n):
if (A[i] != B[i]):
return False
return True
# Driver code
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")
# This code is contributed by Chitranayal
C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GFG
{
// Function to check if both arrays are same
static Boolean areSameSet(List<int> A,
List<int> B)
{
int n = A.Count;
if (B.Count!= n)
{
return false;
}
A.Sort();
B.Sort();
// Compare corresponding elements
for (int i = 0; i < n; i++)
{
if (A[i] != B[i])
{
return false;
}
}
return true;
}
// Driver code
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");
}
}
}
/* This code contributed by PrinciRaj1992 */
JavaScript
<script>
// Javascript implementation of the approach
// Function to check if both arrays are same
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;});
// Compare corresponding elements
for(let i = 0; i < n; i++)
{
if (A[i] != B[i])
{
return false;
}
}
return true;
}
// Driver code
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");
}
// This code is contributed by unknown2108
</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++
// C++ program to implement Naive approach
// to remove duplicates
#include <bits/stdc++.h>
using namespace std;
bool areSameSet(vector<int> A, vector<int> B){
int n = A.size();
// If the size of vector A and vector B is not equal return False
if (B.size() != n)
return false;
// Create a hash table to
// number of instances
unordered_map<int, int> m;
// for each element of A
// increase it's instance by 1.
for (int i = 0; i < n; i++)
m[A[i]]++;
// for each element of B
// decrease it's instance by 1.
for (int i = 0; i < n; i++)
m[B[i]]--;
// Iterate through map and check if
// any entry is non-zero
for (auto i : m){
if (i.second != 0){
return false;
}
}
return true;
}
// driver code to test above function
int main(){
// initializing vector A
vector<int> A = {2, 5, 10, 6, 8, 2, 2};
// initializing vector B
vector<int> B = {2, 5, 6, 8, 10, 2, 2};
// Function call
areSameSet(A, B)? cout << "Yes" : cout << "No";
}
Java
// Java program to implement Naive approach
// to remove duplicates
import java.util.HashMap;
class GFG
{
static boolean areSameSet(int[] A, int[] B)
{
int n = A.length;
if (B.length != n)
return false;
// Create a hash table to
// number of instances
HashMap<Integer,
Integer> m = new HashMap<>();
// for each element of A
// increase it's instance by 1.
for (int i = 0; i < n; i++)
m.put(A[i], m.get(A[i]) == null ? 1 :
m.get(A[i]) + 1);
// for each element of B
// decrease it's instance by 1.
for (int i = 0; i < n; i++)
m.put(B[i], m.get(B[i]) - 1);
// Iterate through map and check if
// any entry is non-zero
for (HashMap.Entry<Integer,
Integer> entry : m.entrySet())
if (entry.getValue() != 0)
return false;
return true;
}
// Driver Code
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");
}
}
// This code is contributed by
// sanjeev2552
Python3
# Python3 program to implement Naive
# approach to remove duplicates
def areSameSet(A, B):
n = len(A)
if (len(B) != n):
return False
# Create a hash table to
# number of instances
m = {}
# For each element of A
# increase it's instance by 1.
for i in range(n):
if A[i] not in m:
m[A[i]] = 1
else:
m[A[i]] += 1
# For each element of B
# decrease it's instance by 1.
for i in range(n):
if B[i] in m:
m[B[i]] -= 1
# Iterate through map and check if
# any entry is non-zero
for i in m:
if (m[i] != 0):
return False
return True
# Driver Code
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")
# This code is contributed by avanitrachhadiya2155
C#
// C# program to implement Naive approach
// to remove duplicates
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;
// Create a hash table to
// number of instances
Dictionary<int,int> m = new Dictionary<int,int>();
// for each element of A
// increase it's instance by 1.
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 each element of B
// decrease it's instance by 1.
for (int i = 0; i < n; i++)
if(m.ContainsKey(B[i]))
m[B[i]] = m[B[i]] - 1;
// Iterate through map and check if
// any entry is non-zero
foreach(KeyValuePair<int, int> entry in m)
if (entry.Value != 0)
return false;
return true;
}
// Driver Code
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");
}
}
// This code is contributed by PrinciRaj1992
JavaScript
<script>
// JavaScript program to implement Naive approach
// to remove duplicates
function areSameSet(A,B)
{
let n = A.length;
if (B.length != n)
return false;
// Create a hash table to
// number of instances
let m = new Map();
// for each element of A
// increase it's instance by 1.
for (let i = 0; i < n; i++)
m.set(A[i], m.get(A[i]) == null ? 1 :
m.get(A[i]) + 1);
// for each element of B
// decrease it's instance by 1.
for (let i = 0; i < n; i++)
m.set(B[i], m.get(B[i]) - 1);
// Iterate through map and check if
// any entry is non-zero
for (let [key, value] of m.entries())
if (value != 0)
return false;
return true;
}
// Driver Code
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");
// This code is contributed by rag2127
</script>
Output:
Yes
Time Complexity: O(n), where n is the number of elements in the given vector.
Auxiliary Space: O(n)
Similar Reads
Last duplicate element in a sorted array
We have a sorted array with duplicate elements and we have to find the index of last duplicate element and print index of it and also print the duplicate element. If no such element found print a message. Examples: Input : arr[] = {1, 5, 5, 6, 6, 7} Output : Last index: 4 Last duplicate item: 6 Inpu
6 min read
Find Equal (or Middle) Point in a sorted array with duplicates
Given a sorted array of n size, the task is to find whether an element exists in the array from where the number of smaller elements is equal to the number of greater elements.If Equal Point appears multiple times in input array, return the index of its first occurrence. If doesn't exist, return -1.
9 min read
Find all pairs with a given sum in two unsorted arrays
Given two unsorted arrays of distinct elements, the task is to find all pairs from both arrays whose sum is equal to a given value X.Examples: Input: arr1[] = {-1, -2, 4, -6, 5, 7}, arr2[] = {6, 3, 4, 0} , x = 8Output: 4 4 5 3Input: arr1[] = {1, 2, 4, 5, 7}, arr2[] = {5, 6, 3, 4, 8}, x = 9Output: 1
13 min read
Union of Two Sorted Arrays with Distinct Elements
Given two sorted arrays a[] and b[] with distinct elements, the task is to return union of both the arrays in sorted 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[] = {2, 5, 7}Output: {1, 2, 3, 5, 7}Explan
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: 1,
7 min read
Construct Binary Array having same number of unequal elements with two other Arrays
Given two binary arrays A[] and B[] of size N, the task is to construct the lexicographically smallest binary array X[] such that the number of non-equal elements in A and X is equal to the number of non-equal elements in B and X. If such an array does not exist return -1. Note: If there are multipl
12 min read
Check if given array is almost sorted (elements are at-most one position away)
Given an array with n distinct elements. An array is said to be almost sorted (non-decreasing) if any of its elements can occur at a maximum of 1 distance away from their original places in the sorted array. We need to find whether the given array is almost sorted or not.Examples: Input : arr[] = {1
11 min read
Check if array contains contiguous integers with duplicates allowed
Given an array of n integers(duplicates allowed). Print "Yes" if it is a set of contiguous integers else print "No". Examples: Input : arr[] = {5, 2, 3, 6, 4, 4, 6, 6}Output : YesThe elements form a contiguous set of integerswhich is {2, 3, 4, 5, 6}.Input : arr[] = {10, 14, 10, 12, 12, 13, 15}Output
15+ min read
Check if given two Arrays are equal (using Map)
Given two arrays, A[] and B[], the task is to check if they are equal or not. Arrays are considered equal if any permutation of array B equates to array A. Examples: Input: A[] = [2, 4, 5, 7, 5, 6] and B[] = [4, 2, 5, 5, 6, 7]Output: YesExplanation: All the elements in array A are present in array B
6 min read
Intersection of Two Sorted Arrays with Distinct Elements
Given two sorted 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 need to return the intersection in sorted order.Note: Intersection of two arrays can be defined as a set containing distinct common ele
13 min read