📜  找出两个数组之间的兼容性差异

📅  最后修改于: 2022-05-13 01:57:50.136000             🧑  作者: Mango

找出两个数组之间的兼容性差异

假设有两个朋友,现在他们想测试他们的友谊,他们的兼容性有多少。给定从 1 …n 编号的数字 n,并要求他们对数字进行排名。任务是找到它们之间的兼容性差异。兼容性差异是他们给出的同一部电影的相对排名中不匹配的数量。

例子 :

Input : a1[] = {3, 1, 2, 4, 5} 
        a2[] = {3, 2, 4, 1, 5}
Output : 2
Explanation : Compatibility difference is two
because first ranks movie 1 before 2 and 4 but
other ranks it after.

Input : a1[] = {5, 3, 1, 2, 4} 
        a2[] = {3, 1, 2, 4, 5}
Output : 5
Total difference is four due to mis-match in
position of 5

在沃尔玛实验室问

这个想法是遍历两个数组。
1)如果当前元素相同,则什么也不做。
2) 在 a2[] 中找到 a1[i] 的下一个位置。设这个位置为 j。一个一个地移动 a2[j] 到 a2[i] (类似于冒泡排序的冒泡步骤)

下面是上述步骤的实现。

C++
// C++ program to count of misplacements
#include 
using namespace std;
int findDifference(int a1[], int a2[], int n)
{
    int res = 0;
 
    for (int i = 0; i < n; i++) {
 
        // If elements at current position
        // are not same
        if (a1[i] != a2[i]) {
 
            // Find position of a1[i] in a2[]
            int j = i + 1;
            while (a1[i] != a2[j])
                j++;
             
            // Insert the element a2[j] at
            // a2[i] by moving all intermediate
            // elements one position ahead.
            while (j != i) {
                swap(a2[j], a2[j - 1]);
                j--;
                res++;
            }
        }
    }
    return res;
}
 
// Driver code
int main()
{
    int a1[] = { 3, 1, 2, 4, 5 };
    int a2[] = { 3, 2, 4, 1, 5 };
    int n = sizeof(a1)/sizeof(a1[0]);
    cout << findDifference(a1, a2, n);
    return 0;
}


Java
// Java program to count of misplacements
public class Compatability_difference {
 
    static int findDifference(int a1[], int a2[], int n)
    {
        int res = 0;
      
        for (int i = 0; i < n; i++) {
      
            // If elements at current position
            // are not same
            if (a1[i] != a2[i]) {
      
                // Find position of a1[i] in a2[]
                int j = i + 1;
                while (a1[i] != a2[j])
                    j++;
                  
                // Insert the element a2[j] at
                // a2[i] by moving all intermediate
                // elements one position ahead.
                while (j != i) {
                     
                    //swap
                    int temp = a2[j - 1];
                    a2[j - 1] = a2[j];
                    a2[j] = temp;
                    j--;
                    res++;
                }
            }
        }
        return res;
    }
      
    // Driver code
    public static void main(String args[])
    {
        int a1[] = { 3, 1, 2, 4, 5 };
        int a2[] = { 3, 2, 4, 1, 5 };
        int n = a1.length;
         
        System.out.println(findDifference(a1, a2, n));
    }
}
// This code is contributed by Sumit Ghosh


Python3
# Python3 program to count misplacements
 
def findDifference(a1, a2, n):
 
    res = 0
 
    for i in range(0, n):
 
        # If elements at current
        # position are not same
        if a1[i] != a2[i]:
 
            # Find position of a1[i] in a2[]
            j = i + 1
            while (a1[i] != a2[j]):
                j += 1
                if i >= n or j >= n:
                    break
             
            # Insert the element a2[j] at
            # a2[i] by moving all intermediate
            # elements one position ahead.
            while (j != i):
                a2[j],a2[j-1] = a2[j-1],a2[j]
                res += 1
                j -= 1
                if i >= n or j >= n:
                    break
         
    return res
 
# Driver code
a1 = [ 3, 1, 2, 4, 5 ]
a2 = [ 3, 2, 4, 1, 5 ]
n = len(a1)
print(findDifference(a1, a2, n))
 
# This code is contributed by Smitha Dinesh Semwal


C#
// C# program to count of misplacements
using System;
 
public class Compatability_difference
{
    static int findDifference(int []a1, int []a2, int n)
    {
        int res = 0;
     
        for (int i = 0; i < n; i++) {
     
            // If elements at current
            // position are not same
            if (a1[i] != a2[i]) {
     
                // Find position of a1[i] in a2[]
                int j = i + 1;
                while (a1[i] != a2[j])
                    j++;
                 
                // Insert the element a2[j] at
                // a2[i] by moving all intermediate
                // elements one position ahead.
                while (j != i) {
                     
                    //swap
                    int temp = a2[j - 1];
                    a2[j - 1] = a2[j];
                    a2[j] = temp;
                    j--;
                    res++;
                }
            }
        }
        return res;
    }
     
    // Driver code
    public static void Main()
    {
        int []a1 = {3, 1, 2, 4, 5};
        int []a2 = {3, 2, 4, 1, 5};
        int n = a1.Length;
         
        // Function calling
        Console.WriteLine(findDifference(a1, a2, n));
    }
}
 
// This code is contributed by vt_m.


Javascript


输出:

2