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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP