พิจารณาว่ามีเพื่อนสองคนและตอนนี้พวกเขาต้องการทดสอบความสัมพันธ์ของพวกเขา ดังนั้นพวกเขาจะตรวจสอบว่าเข้ากันได้มากแค่ไหน ให้ตัวเลข n, หมายเลขจาก 1..n. และขอให้พวกเขาจัดอันดับตัวเลข พวกเขาต้องหาความเข้ากันได้ระหว่างพวกเขา ความแตกต่างของความเข้ากันได้นั้นเป็นจำนวนที่ไม่ตรงกันในการจัดอันดับที่เกี่ยวข้องของภาพยนตร์เรื่องเดียวกันที่ได้รับจากพวกเขา ดังนั้นถ้า A =[3, 1, 2, 4, 5] และ B =[3, 2, 4, 1, 5] ผลลัพธ์จะเป็น 2 ความแตกต่างของความเข้ากันได้คือ 2 เช่นเดียวกับภาพยนตร์อันดับ 1 มาก่อน 2 และ 4 แต่อันดับอื่นๆ ตามมา
เพื่อแก้ปัญหานี้ เราจะสำรวจทั้งอาร์เรย์ เมื่อองค์ประกอบปัจจุบันเหมือนกัน จึงไม่ทำอะไรเลย จากนั้นหาตำแหน่งถัดไปของ A และ B ให้ตำแหน่งเป็น j ทีละตัว B[j] ไปที่ B[i]
ตัวอย่าง
#include<iostream>
using namespace std;
int getArrayDiff(int A[], int B[], int n) {
int result = 0;
for (int i = 0; i < n; i++) {
if (A[i] != B[i]) {
int j = i + 1;
while (A[i] != B[j])
j++;
while (j != i) {
swap(B[j], B[j - 1]);
j--;
result++;
}
}
}
return result;
}
int main() {
int A[] = { 3, 1, 2, 4, 5 };
int B[] = { 3, 2, 4, 1, 5 };
int n = sizeof(A)/sizeof(A[0]);
cout << "Compatibility difference: " << getArrayDiff(A, B, n);
}
ผลลัพธ์
Compatibility difference: 2