用 C++ 找到兩個陣列之間的相容性差異


假設有兩個朋友,現在他們想測試一下他們的默契度。因此,他們將檢查他們有多少默契。假設有 n 個數,編號為 1..n。他們被要求對這些數字進行排序。他們必須找到他們之間的默契度差異。默契度差異基本上是指他們給出的相同電影的相對排名中的不匹配數量。因此,如果 A = [3, 1, 2, 4, 5],並且 B = [3, 2, 4, 1, 5],則輸出將為 2。默契度差異為 2,因為第一個將電影 1 排在 2 和 4 之前,但另一個則將電影 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

更新於: 30-Dec-2019

475 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.