给定两个相同大小的未排序数组,其中所有i的arr [i]> = 0 ,任务是检查两个数组是否彼此置换。
例子:
Input: arr1[] = {2, 1, 3, 5, 4, 3, 2}
arr2[] = {3, 2, 2, 4, 5, 3, 1}
Output: Yes
Input: arr1[] = {2, 1, 3, 5}
arr2[] = {3, 2, 2, 4}
Output: No
已经在使用Sorting和Hashing检查两个数组是否彼此置换中进行了讨论。但是在这篇文章中,讨论了一种不同的方法。
方法:
- 遍历第一个数组A,将所有元素相加并相乘,并将它们分别存储在变量中,分别为Sum1和Mul1 。
- 同样,遍历第二个数组B,将所有元素相加并相乘,并将它们分别存储在变量中,分别为Sum2和Mul2 。
- 现在,比较sum1,sum2和mul1,mul2。如果Sum1 == Sum2和Mul1 == Mul2 ,则两个数组都是彼此置换,否则不是。
下面是上述方法的实现:
C++
// CPP code to check if arrays
// are permutations of eah other
#include
using namespace std;
// Function to check if arrays
// are permutaitons of each other.
bool arePermutations(int a[], int b[], int n, int m)
{
int sum1 = 0, sum2 = 0, mul1 = 1, mul2 = 1;
// Calculating sum and multiply of first array
for (int i = 0; i < n; i++) {
sum1 += a[i];
mul1 *= a[i];
}
// Calculating sum and multiply of second array
for (int i = 0; i < m; i++) {
sum2 += b[i];
mul2 *= b[i];
}
// If sum and mul of both arrays are equal,
// return true, else return false.
return ((sum1 == sum2) && (mul1 == mul2));
}
// Driver code
int main()
{
int a[] = { 1, 3, 2 };
int b[] = { 3, 1, 2 };
int n = sizeof(a) / sizeof(int);
int m = sizeof(b) / sizeof(int);
if (arePermutations(a, b, n, m))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
Java
// Java code to check if arrays
// are permutations of eah other
import java.io.*;
class GFG {
// Function to check if arrays
// are permutaitons of each other.
static boolean arePermutations(int a[], int b[], int n, int m)
{
int sum1 = 0, sum2 = 0, mul1 = 1, mul2 = 1;
// Calculating sum and multiply of first array
for (int i = 0; i < n; i++) {
sum1 += a[i];
mul1 *= a[i];
}
// Calculating sum and multiply of second array
for (int i = 0; i < m; i++) {
sum2 += b[i];
mul2 *= b[i];
}
// If sum and mul of both arrays are equal,
// return true, else return false.
return ((sum1 == sum2) && (mul1 == mul2));
}
// Driver code
public static void main (String[] args) {
int a[] = { 1, 3, 2 };
int b[] = { 3, 1, 2 };
int n = a.length;
int m = b.length;
if (arePermutations(a, b, n, m)==true)
System.out.println( "Yes");
else
System.out.println( "No");
}
}
// This code is contributed by inder_verma..
Python3
# Python 3 program to check if arrays
# are permutations of eah other
# Function to check if arrays
# are permutaitons of each other
def arePermutations(a, b, n, m) :
sum1, sum2, mul1, mul2 = 0, 0, 1, 1
# Calculating sum and multiply of first array
for i in range(n) :
sum1 += a[i]
mul1 *= a[i]
# Calculating sum and multiply of second array
for i in range(m) :
sum2 += b[i]
mul2 *= b[i]
# If sum and mul of both arrays are equal,
# return true, else return false.
return((sum1 == sum2) and (mul1 == mul2))
# Driver code
if __name__ == "__main__" :
a = [ 1, 3, 2]
b = [ 3, 1, 2]
n = len(a)
m = len(b)
if arePermutations(a, b, n, m) :
print("Yes")
else :
print("No")
# This code is contributed by ANKITRAI1
C#
// C# code to check if arrays
// are permutations of eah other
using System;
class GFG
{
// Function to check if arrays
// are permutaitons of each other.
static bool arePermutations(int[] a, int[] b,
int n, int m)
{
int sum1 = 0, sum2 = 0,
mul1 = 1, mul2 = 1;
// Calculating sum and multiply
// of first array
for (int i = 0; i < n; i++)
{
sum1 += a[i];
mul1 *= a[i];
}
// Calculating sum and multiply
// of second array
for (int i = 0; i < m; i++)
{
sum2 += b[i];
mul2 *= b[i];
}
// If sum and mul of both arrays
// are equal, return true, else
// return false.
return ((sum1 == sum2) &&
(mul1 == mul2));
}
// Driver code
public static void Main ()
{
int[] a = { 1, 3, 2 };
int[] b = { 3, 1, 2 };
int n = a.Length;
int m = b.Length;
if (arePermutations(a, b, n, m) == true)
Console.Write( "Yes");
else
Console.Write( "No");
}
}
// This code is contributed
// by ChitraNayal
PHP
输出:
Yes