找出两个数组之间的兼容性差异
假设有两个朋友,现在他们想测试他们的友谊,他们的兼容性有多少。给定从 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