Hãy xem xét có hai người bạn và bây giờ họ muốn kiểm tra mối quan hệ của họ. Vì vậy, họ sẽ kiểm tra xem chúng tương thích đến mức nào. Cho các số n, được đánh số từ 1..n. Và họ được yêu cầu xếp hạng các con số. Họ phải tìm ra sự khác biệt về khả năng tương thích giữa chúng. Sự khác biệt về khả năng tương thích về cơ bản là số lượng không trùng khớp trong xếp hạng tương đối của cùng một bộ phim do chúng đưa ra. Vì vậy, nếu A =[3, 1, 2, 4, 5] và B =[3, 2, 4, 1, 5], thì đầu ra sẽ là 2. Sự khác biệt về khả năng tương thích là 2, như phim xếp hạng đầu tiên trước đó 2 và 4, nhưng các thứ hạng khác xếp sau.
Để giải quyết vấn đề này, chúng ta sẽ duyệt qua cả hai mảng, khi các phần tử hiện tại giống nhau thì không làm gì cả. Sau đó tìm vị trí tiếp theo của A và B, đặt vị trí là j, lần lượt di chuyển B [j] đến B [i]
Ví dụ
#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); }
Đầu ra
Compatibility difference: 2