C++中從給定陣列中查詢缺失的偶數和奇數元素


問題陳述

給定兩個整數陣列 even[] 和 odd[],它們分別包含連續的偶數和奇數元素,每個陣列都缺少一個元素。任務是找到缺失的元素。

示例

If even[] = {10, 8, 6, 16, 12} and
odd[] = {3, 9, 13, 7, 11} then
missing number from even array is 14 and from odd array is 5.

演算法

  • 將 even[] 陣列中的最小和最大偶數元素分別儲存在變數 minEven 和 maxEven 中。
  • 前 N 個偶數的和為 N * (N + 1)。計算從 2 到 minEven 的偶數和,記為 sum1,以及從 2 到 maxEven 的偶數和,記為 sum2。
  • even 陣列所需的和將為 reqSum = sum2 – sum1 + minEven,從該 reqSum 中減去 even[] 陣列的和將給出缺失的偶數。
  • 類似地,可以找到缺失的奇數,因為我們知道前 N 個奇數的和為 N2。

示例

 即時演示

#include <bits/stdc++.h>
using namespace std;
void findMissingNums(int even[], int sizeEven, int odd[], int sizeOdd) {
   int minEven = INT_MAX;
   int maxEven = INT_MIN;
   int minOdd = INT_MAX;
   int maxOdd = INT_MIN;
   int sumEvenArr = 0, sumOddArr = 0;
   for (int i = 0; i < sizeEven; i++) {
      minEven = min(minEven, even[i]);
      maxEven = max(maxEven, even[i]);
      sumEvenArr += even[i];
   }
   for (int i = 0; i < sizeOdd; i++) {
      minOdd = min(minOdd, odd[i]);
      maxOdd = max(maxOdd, odd[i]);
      sumOddArr += odd[i];
   }
   int totalTerms = 0, reqSum = 0;
   totalTerms = minEven / 2;
   int evenSumMin = totalTerms * (totalTerms + 1);
   totalTerms = maxEven / 2;
   int evenSumMax = totalTerms * (totalTerms + 1);
   reqSum = evenSumMax - evenSumMin + minEven;
   cout << "Missing even number = " << reqSum - sumEvenArr << "\n";
   totalTerms = (minOdd / 2) + 1;
   int oddSumMin = totalTerms * totalTerms;
   totalTerms = (maxOdd / 2) + 1;
   int oddSumMax = totalTerms * totalTerms;
   reqSum = oddSumMax - oddSumMin + minOdd;
   cout << "Missing odd number = " << reqSum - sumOddArr << "\n";
}
int main() {
   int even[] = {10, 8, 6, 16, 12};
   int sizeEven = sizeof(even) / sizeof(even[0]);
   int odd[] = {3, 9, 13, 7, 11};
   int sizeOdd = sizeof(odd) / sizeof(odd[0]);
   findMissingNums(even, sizeEven, odd, sizeOdd);
   return 0;
}

編譯並執行上述程式時,將生成以下輸出:

輸出

Missing even number = 14
Missing odd number = 5

更新於: 2019年12月20日

237 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告