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 次观看

启动你的 职业生涯

完成课程,获得认证

立即开始
广告