C++ Program to check if two Arrays are Equal or not
Last Updated :
05 Jul, 2022
Given two arrays arr1[] and arr2[] of length N and M respectively, the task is to check if the two arrays are equal or not.
Note: Arrays are said to be equal if and only if both arrays contain the same elements and the frequencies of each element in both arrays are the same.
Examples:
Input: arr1[] = {1, 2, 3, 4, 5}, arr2[] = {5, 4, 3, 2, 1}
Output : Equal
Explanation: As both the arrays contain same elements.
Input: arr1[] = {1, 5, 2, 7, 3, 8}, arr2[] = {8, 2, 3, 5, 7, 1}
Output : Equal
Naive Approach: The basic way to solve the problem is as follows:
Apply sorting on both the arrays and then match each element of one array with the element at same index of the other array.
Follow the steps mentioned below to implement the idea.
- Check if the length of both the arrays are equal or not
- Then sort both the arrays, so that we can compare every equal element.
- Linearly iterate over both the arrays and check if the elements are equal or not,
- If equal then print Equal and if not then print Not equal.
Below is the implementation of the above approach:
C++
// C++ program to implement the approach
#include <bits/stdc++.h>
using namespace std;
// Function to check if both arrays are equal
bool checkArrays(int arr1[], int arr2[],
int n, int m)
{
// If lengths of array are not equal
// means array are not equal
if (n != m)
return false;
// Sort both arrays
sort(arr1, arr1 + n);
sort(arr2, arr2 + m);
// Linearly compare elements
for (int i = 0; i < n; i++)
if (arr1[i] != arr2[i])
return false;
// If elements are same
return true;
}
// Driver Code
int main()
{
int arr1[] = { 1, 2, 3, 4, 5 };
int arr2[] = { 5, 4, 3, 2, 1 };
int N = sizeof(arr1) / sizeof(int);
int M = sizeof(arr2) / sizeof(int);
// Function call
if (checkArrays(arr1, arr2, N, M))
cout << "Equal";
else
cout << "Not Equal";
return 0;
}
Time Complexity: O(N * logN)
Auxiliary Space: O(1)
Efficient Approach: The problem can be solved efficiently using Hashing (unordered_map),
Use hashing to count the frequency of each element of both arrays. Then traverse through the hashtables of the arrays and match the frequencies of the elements.
Follow the below mentioned steps to solve the problem:
- Check if the length of both the arrays are equal or not
- Create an unordered map and store all elements and frequency of elements of arr1[] in the map.
- Traverse over arr2[] and check if count of each and every element in arr2[] matches with the count in arr1[]. This can be done by decrementing the frequency while traversing in arr2[].
Below is the implementation of the above approach:
C++
// C++ program to implement the approach
#include <bits/stdc++.h>
using namespace std;
// Function to check if both arrays are equal
bool checkArrays(int arr1[], int arr2[],
int n, int m)
{
// If lengths of arrays are not equal
if (n != m)
return false;
// Store arr1[] elements and
// their frequencies in hash map
unordered_map<int, int> mp;
for (int i = 0; i < n; i++)
mp[arr1[i]]++;
// Traverse arr2[] elements and
// check if all elements of arr2[] are
// present same number of times or not.
for (int i = 0; i < n; i++) {
// If there is an element in arr2[],
// but not in arr1[]
if (mp.find(arr2[i]) == mp.end())
return false;
// If an element of arr2[] appears
// more times than it appears in arr1[]
if (mp[arr2[i]] == 0)
return false;
// Decrease the count of arr2 elements
// in the unordered map
mp[arr2[i]]--;
}
return true;
}
// Driver Code
int main()
{
int arr1[] = { 1, 2, 3, 4, 5 };
int arr2[] = { 4, 3, 1, 5, 2 };
int N = sizeof(arr1) / sizeof(int);
int M = sizeof(arr2) / sizeof(int);
// Function call
if (checkArrays(arr1, arr2, N, M))
cout << "Equal";
else
cout << "Not Equal";
return 0;
}
Time Complexity: O(N)
Auxiliary Space: O(N)
Similar Reads
C++ Program To Check if Two Matrices are Identical The below program checks if two square matrices of size 4*4 are identical or not. For any two matrices to be equal, the number of rows and columns in both the matrix should be equal and the corresponding elements should also be equal. Recommended: Please solve it on "PRACTICE" first, before moving
2 min read
C++ Program To Check If Two Linked Lists Are Identical Two Linked Lists are identical when they have the same data and the arrangement of data is also the same. For example, Linked lists a (1->2->3) and b(1->2->3) are identical. . Write a function to check if the given two linked lists are identical. Recommended: Please solve it on "PRACTICE
3 min read
Program to check if an Array is Palindrome or not using STL in C++ Given an array, the task is to determine whether an array is a palindrome or not, using STL in C++. Examples: Input: arr[] = {3, 6, 0, 6, 3} Output: Palindrome Input: arr[] = {1, 2, 3, 4, 5} Output: Not Palindrome Approach: Get the reverse of the Array using reverse() method, provided in STL.Initial
2 min read
Check if two arrays can be made equal by swapping pairs of one of the arrays Given two binary arrays arr1[] and arr2[] of the same size, the task is to make both the arrays equal by swapping pairs of arr1[ ] only if arr1[i] = 0 and arr1[j] = 1 (0 ? i < j < N)). If it is possible to make both the arrays equal, print "Yes". Otherwise, print "No". Examples: Input: arr1[]
11 min read
C Program to check if two given strings are isomorphic to each other Given two strings str1 and str2, the task is to check if the two given strings are isomorphic to each other or not. Two strings are said to be isomorphic if there is a one to one mapping possible for every character of str1 to every character of str2 and all occurrences of every character in str1 ma
2 min read