📌  相关文章
📜  使用数学运算检查两个数组是否彼此置换

📅  最后修改于: 2021-05-07 00:05:35             🧑  作者: Mango

给定两个相同大小的未排序数组,其中所有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

已经在使用SortingHashing检查两个数组是否彼此置换中进行了讨论。但是在这篇文章中,讨论了一种不同的方法。

方法:

  1. 遍历第一个数组A,所有元素相加相乘,并将它们分别存储在变量中,分别为Sum1Mul1
  2. 同样,遍历第二个数组B,所有元素相加相乘,并将它们分别存储在变量中,分别为Sum2Mul2
  3. 现在,比较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