给定两个给定的相等长度的数组,任务是查找给定的数组是否相等。如果两个数组都包含相同的元素集,则称两个数组相等,但是元素的排列(或排列)可能会不同。
注意:如果存在重复,则要使两个数组相等,重复元素的计数也必须相同。
例子 :
Input : arr1[] = {1, 2, 5, 4, 0};
arr2[] = {2, 4, 5, 0, 1};
Output : Yes
Input : arr1[] = {1, 2, 5, 4, 0, 2, 1};
arr2[] = {2, 4, 5, 0, 1, 1, 2};
Output : Yes
Input : arr1[] = {1, 7, 1};
arr2[] = {7, 7, 1};
Output : No
一个简单的解决方案是对两个数组进行排序,然后线性比较元素。
C++
// C++ program to find given two array
// are equal or not
#include
using namespace std;
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
bool areEqual(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 all elements were same.
return true;
}
// Driver Code
int main()
{
int arr1[] = { 3, 5, 2, 5, 2 };
int arr2[] = { 2, 3, 5, 5, 2 };
int n = sizeof(arr1) / sizeof(int);
int m = sizeof(arr2) / sizeof(int);
if (areEqual(arr1, arr2, n, m))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to find given two array
// are equal or not
import java.io.*;
import java.util.*;
class GFG {
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
public static boolean areEqual(int arr1[], int arr2[])
{
int n = arr1.length;
int m = arr2.length;
// If lengths of array are not equal means
// array are not equal
if (n != m)
return false;
// Sort both arrays
Arrays.sort(arr1);
Arrays.sort(arr2);
// Linearly compare elements
for (int i = 0; i < n; i++)
if (arr1[i] != arr2[i])
return false;
// If all elements were same.
return true;
}
// Driver code
public static void main(String[] args)
{
int arr1[] = { 3, 5, 2, 5, 2 };
int arr2[] = { 2, 3, 5, 5, 2 };
if (areEqual(arr1, arr2))
System.out.println("Yes");
else
System.out.println("No");
}
}
Python3
# Python3 program to find given
# two array are equal or not
# Returns true if arr1[0..n-1] and
# arr2[0..m-1] contain same elements.
def areEqual(arr1, arr2, n, m):
# If lengths of array are not
# equal means array are not equal
if (n != m):
return False
# Sort both arrays
arr1.sort()
arr2.sort()
# Linearly compare elements
for i in range(0, n - 1):
if (arr1[i] != arr2[i]):
return False
# If all elements were same.
return True
# Driver Code
arr1 = [3, 5, 2, 5, 2]
arr2 = [2, 3, 5, 5, 2]
n = len(arr1)
m = len(arr2)
if (areEqual(arr1, arr2, n, m)):
print("Yes")
else:
print("No")
# This code is contributed
# by Shivi_Aggarwal.
C#
// C# program to find given two array
// are equal or not
using System;
class GFG {
// Returns true if arr1[0..n-1] and
// arr2[0..m-1] contain same elements.
public static bool areEqual(int[] arr1, int[] arr2)
{
int n = arr1.Length;
int m = arr2.Length;
// If lengths of array are not
// equal means array are not equal
if (n != m)
return false;
// Sort both arrays
Array.Sort(arr1);
Array.Sort(arr2);
// Linearly compare elements
for (int i = 0; i < n; i++)
if (arr1[i] != arr2[i])
return false;
// If all elements were same.
return true;
}
// Driver code
public static void Main()
{
int[] arr1 = { 3, 5, 2, 5, 2 };
int[] arr2 = { 2, 3, 5, 5, 2 };
if (areEqual(arr1, arr2))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by anuj_67.
PHP
Javascript
C++
// C++ program to find given two array
// are equal or not using hashing technique
#include
using namespace std;
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
bool areEqual(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 counts in
// hash map
unordered_map 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;
mp[arr2[i]]--;
}
return true;
}
// Driver Code
int main()
{
int arr1[] = { 3, 5, 2, 5, 2 };
int arr2[] = { 2, 3, 5, 5, 2 };
int n = sizeof(arr1) / sizeof(int);
int m = sizeof(arr2) / sizeof(int);
if (areEqual(arr1, arr2, n, m))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to find given two array
// are equal or not using hashing technique
import java.util.*;
import java.io.*;
class GFG {
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
public static boolean areEqual(int arr1[], int arr2[])
{
int n = arr1.length;
int m = arr2.length;
// If lengths of arrays are not equal
if (n != m)
return false;
// Store arr1[] elements and their counts in
// hash map
Map map
= new HashMap();
int count = 0;
for (int i = 0; i < n; i++) {
if (map.get(arr1[i]) == null)
map.put(arr1[i], 1);
else {
count = map.get(arr1[i]);
count++;
map.put(arr1[i], count);
}
}
// 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 (!map.containsKey(arr2[i]))
return false;
// If an element of arr2[] appears more
// times than it appears in arr1[]
if (map.get(arr2[i]) == 0)
return false;
count = map.get(arr2[i]);
--count;
map.put(arr2[i], count);
}
return true;
}
// Driver code
public static void main(String[] args)
{
int arr1[] = { 3, 5, 2, 5, 2 };
int arr2[] = { 2, 3, 5, 5, 2 };
if (areEqual(arr1, arr2))
System.out.println("Yes");
else
System.out.println("No");
}
}
Python3
# Python3 program to find if given
# two arrays are equal or not
# using dictionary
from collections import defaultdict
# Returns true if arr1[0..n-1] and
# arr2[0..m-1] contain same elements.
def areEqual(arr1, arr2, n, m):
# If lengths of array are not
# equal means array are not equal
if (n != m):
return False
# Create a defaultdict count to
# store counts
count = defaultdict(int)
# Store the elements of arr1
# and their counts in the dictionary
for i in arr1:
count[i] += 1
# Traverse through arr2 and compare
# the elements and its count with
# the elements of arr1
for i in arr2:
# Return false if the elemnent
# is not in arr2 or if any element
# appears more no. of times than in arr1
if (count[i] == 0):
return False
# If element is found, decrement
# its value in the dictionary
else:
count[i] -= 1
# Return true if both arr1 and
# arr2 are equal
return True
# Driver Code
arr1 = [3, 5, 2, 5, 2]
arr2 = [2, 3, 5, 5, 2]
n = len(arr1)
m = len(arr2)
if areEqual(arr1, arr2, n, m):
print("Yes")
else:
print("No")
# This code is contributed by Karthik_Aravind
C#
// C# program to find given two array
// are equal or not using hashing technique
using System;
using System.Collections.Generic;
class GFG {
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
public static bool areEqual(int[] arr1, int[] arr2)
{
int n = arr1.Length;
int m = arr2.Length;
// If lengths of arrays are not equal
if (n != m)
return false;
// Store arr1[] elements and their counts in
// hash map
Dictionary map
= new Dictionary();
int count = 0;
for (int i = 0; i < n; i++) {
if (!map.ContainsKey(arr1[i]))
map.Add(arr1[i], 1);
else {
count = map[arr1[i]];
count++;
map.Remove(arr1[i]);
map.Add(arr1[i], count);
}
}
// 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 (!map.ContainsKey(arr2[i]))
return false;
// If an element of arr2[] appears more
// times than it appears in arr1[]
if (map[arr2[i]] == 0)
return false;
count = map[arr2[i]];
--count;
if (!map.ContainsKey(arr2[i]))
map.Add(arr2[i], count);
}
return true;
}
// Driver code
public static void Main(String[] args)
{
int[] arr1 = { 3, 5, 2, 5, 2 };
int[] arr2 = { 2, 3, 5, 5, 2 };
if (areEqual(arr1, arr2))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
/* This code contributed by PrinciRaj1992 */
C++14
// C++ program to find given two array
// are equal or not
#include
using namespace std;
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
bool areEqual(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;
// to store xor of both arrays
int b1 = arr1[0];
int b2 = arr2[0];
// find xor of each elements in array
for (int i = 1; i < n; i++) {
b1 ^= arr1[i];
}
for (int i = 1; i < m; i++) {
b2 ^= arr2[i];
}
int all_xor = b1 ^ b2;
// if xor is zero means they are equal (5^5=0)
if (all_xor == 0)
return true;
// If all elements were not same, then xor will not be
// zero
return false;
}
// Driver Code
int main()
{
int arr1[] = { 3, 6, 7, 5, 2 };
int arr2[] = { 2, 3, 5, 6, 7 };
int n = sizeof(arr1) / sizeof(int);
int m = sizeof(arr2) / sizeof(int);
// Function call
if (areEqual(arr1, arr2, n, m))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to find given two array
// are equal or not
import java.io.*;
import java.util.*;
class GFG{
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
public static boolean areEqual(int arr1[],
int arr2[])
{
// Length of the two array
int n = arr1.length;
int m = arr2.length;
// If lengths of arrays are not equal
if (n != m)
return false;
// To store xor of both arrays
int b1 = arr1[0];
int b2 = arr2[0];
// Find xor of each elements in array
for(int i = 1; i < n; i++)
{
b1 ^= arr1[i];
}
for(int i = 1; i < m; i++)
{
b2 ^= arr2[i];
}
int all_xor = b1 ^ b2;
// If xor is zero means they are
// equal (5^5=0)
if (all_xor == 0)
return true;
// If all elements were not same,
// then xor will not be zero
return false;
}
// Driver code
public static void main(String[] args)
{
int arr1[] = { 3, 5, 2, 5, 2 };
int arr2[] = { 2, 3, 5, 5, 2 };
// Function call
if (areEqual(arr1, arr2))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by sayantanbose2001
Python3
# Python3 program to find given
# two array are equal or not
# Returns true if arr1[0..n-1] and
# arr2[0..m-1] contain same elements.
def areEqual(arr1, arr2, n, m):
# If lengths of array are not
# equal means array are not equal
if (n != m):
return False
b1 = arr1[0]
b2 = arr2[0]
# find xor of all elements
for i in range(1, n - 1):
b1 ^= arr1[i]
for i in range(1, m - 1):
b2 ^= arr2[i]
all_xor = b1 ^ b2
# If all elements were same then xor will be zero
if(all_xor == 0):
return True
return False
# Driver Code
arr1 = [3, 5, 2, 5, 2]
arr2 = [2, 3, 5, 5, 2]
n = len(arr1)
m = len(arr2)
# Function call
if (areEqual(arr1, arr2, n, m)):
print("Yes")
else:
print("No")
输出
Yes
时间复杂度: O(n log n)
辅助空间: O(1)
此方法的有效解决方案是使用哈希。我们将arr1 []的所有元素及其计数存储在哈希表中。然后我们遍历arr2 []并检查arr2 []中每个元素的计数是否与arr1 []中的计数匹配。
以下是上述想法的实现。我们使用unordered_map来存储计数。
C++
// C++ program to find given two array
// are equal or not using hashing technique
#include
using namespace std;
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
bool areEqual(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 counts in
// hash map
unordered_map 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;
mp[arr2[i]]--;
}
return true;
}
// Driver Code
int main()
{
int arr1[] = { 3, 5, 2, 5, 2 };
int arr2[] = { 2, 3, 5, 5, 2 };
int n = sizeof(arr1) / sizeof(int);
int m = sizeof(arr2) / sizeof(int);
if (areEqual(arr1, arr2, n, m))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to find given two array
// are equal or not using hashing technique
import java.util.*;
import java.io.*;
class GFG {
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
public static boolean areEqual(int arr1[], int arr2[])
{
int n = arr1.length;
int m = arr2.length;
// If lengths of arrays are not equal
if (n != m)
return false;
// Store arr1[] elements and their counts in
// hash map
Map map
= new HashMap();
int count = 0;
for (int i = 0; i < n; i++) {
if (map.get(arr1[i]) == null)
map.put(arr1[i], 1);
else {
count = map.get(arr1[i]);
count++;
map.put(arr1[i], count);
}
}
// 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 (!map.containsKey(arr2[i]))
return false;
// If an element of arr2[] appears more
// times than it appears in arr1[]
if (map.get(arr2[i]) == 0)
return false;
count = map.get(arr2[i]);
--count;
map.put(arr2[i], count);
}
return true;
}
// Driver code
public static void main(String[] args)
{
int arr1[] = { 3, 5, 2, 5, 2 };
int arr2[] = { 2, 3, 5, 5, 2 };
if (areEqual(arr1, arr2))
System.out.println("Yes");
else
System.out.println("No");
}
}
Python3
# Python3 program to find if given
# two arrays are equal or not
# using dictionary
from collections import defaultdict
# Returns true if arr1[0..n-1] and
# arr2[0..m-1] contain same elements.
def areEqual(arr1, arr2, n, m):
# If lengths of array are not
# equal means array are not equal
if (n != m):
return False
# Create a defaultdict count to
# store counts
count = defaultdict(int)
# Store the elements of arr1
# and their counts in the dictionary
for i in arr1:
count[i] += 1
# Traverse through arr2 and compare
# the elements and its count with
# the elements of arr1
for i in arr2:
# Return false if the elemnent
# is not in arr2 or if any element
# appears more no. of times than in arr1
if (count[i] == 0):
return False
# If element is found, decrement
# its value in the dictionary
else:
count[i] -= 1
# Return true if both arr1 and
# arr2 are equal
return True
# Driver Code
arr1 = [3, 5, 2, 5, 2]
arr2 = [2, 3, 5, 5, 2]
n = len(arr1)
m = len(arr2)
if areEqual(arr1, arr2, n, m):
print("Yes")
else:
print("No")
# This code is contributed by Karthik_Aravind
C#
// C# program to find given two array
// are equal or not using hashing technique
using System;
using System.Collections.Generic;
class GFG {
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
public static bool areEqual(int[] arr1, int[] arr2)
{
int n = arr1.Length;
int m = arr2.Length;
// If lengths of arrays are not equal
if (n != m)
return false;
// Store arr1[] elements and their counts in
// hash map
Dictionary map
= new Dictionary();
int count = 0;
for (int i = 0; i < n; i++) {
if (!map.ContainsKey(arr1[i]))
map.Add(arr1[i], 1);
else {
count = map[arr1[i]];
count++;
map.Remove(arr1[i]);
map.Add(arr1[i], count);
}
}
// 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 (!map.ContainsKey(arr2[i]))
return false;
// If an element of arr2[] appears more
// times than it appears in arr1[]
if (map[arr2[i]] == 0)
return false;
count = map[arr2[i]];
--count;
if (!map.ContainsKey(arr2[i]))
map.Add(arr2[i], count);
}
return true;
}
// Driver code
public static void Main(String[] args)
{
int[] arr1 = { 3, 5, 2, 5, 2 };
int[] arr2 = { 2, 3, 5, 5, 2 };
if (areEqual(arr1, arr2))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
/* This code contributed by PrinciRaj1992 */
输出
Yes
时间复杂度: O(n)
辅助空间: O(n)
一种不对数组的每个元素进行比较且不使用unordered_map(通过使用XOR)的替代解决方案。仅当每个元素在数组中仅存在一次时,此方法才有效。例如:数组a:{3,3}和数组b:{5,5},xor_of_array_a(例如b1)= 0和xor_of_array_b = 0(例如b2)和b1 ^ b2 = 0,但是数组a和数组b是不相等。
C++ 14
// C++ program to find given two array
// are equal or not
#include
using namespace std;
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
bool areEqual(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;
// to store xor of both arrays
int b1 = arr1[0];
int b2 = arr2[0];
// find xor of each elements in array
for (int i = 1; i < n; i++) {
b1 ^= arr1[i];
}
for (int i = 1; i < m; i++) {
b2 ^= arr2[i];
}
int all_xor = b1 ^ b2;
// if xor is zero means they are equal (5^5=0)
if (all_xor == 0)
return true;
// If all elements were not same, then xor will not be
// zero
return false;
}
// Driver Code
int main()
{
int arr1[] = { 3, 6, 7, 5, 2 };
int arr2[] = { 2, 3, 5, 6, 7 };
int n = sizeof(arr1) / sizeof(int);
int m = sizeof(arr2) / sizeof(int);
// Function call
if (areEqual(arr1, arr2, n, m))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to find given two array
// are equal or not
import java.io.*;
import java.util.*;
class GFG{
// Returns true if arr1[0..n-1] and arr2[0..m-1]
// contain same elements.
public static boolean areEqual(int arr1[],
int arr2[])
{
// Length of the two array
int n = arr1.length;
int m = arr2.length;
// If lengths of arrays are not equal
if (n != m)
return false;
// To store xor of both arrays
int b1 = arr1[0];
int b2 = arr2[0];
// Find xor of each elements in array
for(int i = 1; i < n; i++)
{
b1 ^= arr1[i];
}
for(int i = 1; i < m; i++)
{
b2 ^= arr2[i];
}
int all_xor = b1 ^ b2;
// If xor is zero means they are
// equal (5^5=0)
if (all_xor == 0)
return true;
// If all elements were not same,
// then xor will not be zero
return false;
}
// Driver code
public static void main(String[] args)
{
int arr1[] = { 3, 5, 2, 5, 2 };
int arr2[] = { 2, 3, 5, 5, 2 };
// Function call
if (areEqual(arr1, arr2))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by sayantanbose2001
Python3
# Python3 program to find given
# two array are equal or not
# Returns true if arr1[0..n-1] and
# arr2[0..m-1] contain same elements.
def areEqual(arr1, arr2, n, m):
# If lengths of array are not
# equal means array are not equal
if (n != m):
return False
b1 = arr1[0]
b2 = arr2[0]
# find xor of all elements
for i in range(1, n - 1):
b1 ^= arr1[i]
for i in range(1, m - 1):
b2 ^= arr2[i]
all_xor = b1 ^ b2
# If all elements were same then xor will be zero
if(all_xor == 0):
return True
return False
# Driver Code
arr1 = [3, 5, 2, 5, 2]
arr2 = [2, 3, 5, 5, 2]
n = len(arr1)
m = len(arr2)
# Function call
if (areEqual(arr1, arr2, n, m)):
print("Yes")
else:
print("No")
输出
Yes
时间复杂度: O(n)
辅助空间: O(1)
改进者: vt_m,Shivi_Aggarwal,imrohan,princiraj1992,karthikaravindt88, anupriyanishad