Find the compatibility difference between two arrays
Suppose there are two friends and now they want to test their friendship that how much compatible they are. Given the numbers n numbered from 1 …n and they are asked to rank the numbers. The task is find the compatibility difference between them. Compatibility difference is the number of mis-matches in the relative ranking of the same movie given by them.
Examples :
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
Asked in Walmart Labs
The idea is traverse both arrays.
- If current elements are same, do nothing.
- Find next position of a1[i] in a2[]. Let this position be j. One by one move a2[j] to a2[i] (Similar to bubble step of bubble sort)
Below is the implementation of above steps.
C++
#include <bits/stdc++.h>
using namespace std;
int findDifference( int a1[], int a2[], int n)
{
int res = 0;
for ( int i = 0; i < n; i++) {
if (a1[i] != a2[i]) {
int j = i + 1;
while (a1[i] != a2[j])
j++;
while (j != i) {
swap(a2[j], a2[j - 1]);
j--;
res++;
}
}
}
return res;
}
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
public class Compatability_difference {
static int findDifference( int a1[], int a2[], int n)
{
int res = 0 ;
for ( int i = 0 ; i < n; i++) {
if (a1[i] != a2[i]) {
int j = i + 1 ;
while (a1[i] != a2[j])
j++;
while (j != i) {
int temp = a2[j - 1 ];
a2[j - 1 ] = a2[j];
a2[j] = temp;
j--;
res++;
}
}
}
return res;
}
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));
}
}
|
Python3
def findDifference(a1, a2, n):
res = 0
for i in range ( 0 , n):
if a1[i] ! = a2[i]:
j = i + 1
while (a1[i] ! = a2[j]):
j + = 1
if i > = n or j > = n:
break
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
a1 = [ 3 , 1 , 2 , 4 , 5 ]
a2 = [ 3 , 2 , 4 , 1 , 5 ]
n = len (a1)
print (findDifference(a1, a2, n))
|
C#
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 (a1[i] != a2[i]) {
int j = i + 1;
while (a1[i] != a2[j])
j++;
while (j != i) {
int temp = a2[j - 1];
a2[j - 1] = a2[j];
a2[j] = temp;
j--;
res++;
}
}
}
return res;
}
public static void Main()
{
int []a1 = {3, 1, 2, 4, 5};
int []a2 = {3, 2, 4, 1, 5};
int n = a1.Length;
Console.WriteLine(findDifference(a1, a2, n));
}
}
|
Javascript
<script>
function findDifference(a1, a2, n)
{
let res = 0;
for (let i = 0; i < n; i++)
{
if (a1[i] != a2[i])
{
let j = i + 1;
while (a1[i] != a2[j])
j++;
while (j != i)
{
let temp = a2[j - 1];
a2[j - 1] = a2[j];
a2[j] = temp;
j--;
res++;
}
}
}
return res;
}
let a1 = [ 3, 1, 2, 4, 5 ];
let a2 = [ 3, 2, 4, 1, 5 ];
let n = a1.length;
document.write(findDifference(a1, a2, n));
</script>
|
Last Updated :
15 Jul, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...