C++ 程式,尋找對子陣列取反後我們可以獲得的不同值的數量


假設我們有一個包含 n 個元素的陣列 A。我們選擇給定數字的任何子集並對這些數字取反。我們必須找到我們可以獲得的陣列中不同值的最大數量。

因此,如果輸入類似於 A = [1, 1, 2, 2],那麼輸出將是 4,因為我們可以對陣列的第一和最後一個數字取反,得到 [ -1, 1, 2, -2],其中有四個不同的值。

步驟

為了解決這個問題,我們將按照以下步驟進行操作:

Define one set se
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   x := A[i]
   if x is present in se, then:
      insert -x into se
   Otherwise
      insert x into se
return size of se

示例

讓我們看下面的實現以獲得更好的理解:

#include <bits/stdc++.h>
using namespace std;

int solve(vector<int> A) {
   set<int> se;
   int n = A.size();
   for (int i = 0; i < n; i++) {
      int x = A[i];
      if (se.count(x))
         se.insert(-x);
      else
         se.insert(x);
   }
   return se.size();
}
int main() {
   vector<int> A = { 1, 1, 2, 2 };
   cout << solve(A) << endl;
}

輸入

{ 1, 1, 2, 2 }

輸出

4

更新於:03-Mar-2022

166 次觀看

啟動你的 職業生涯

完成課程,獲得認證

立即開始
廣告