C++ 优化序列差异:模运算最小化不同元素数量
#include
using namespace std;
int main() { int N; cin >> N;
vector<int> A(N);
for (int i = 0; i < N; i++) {
cin >> A[i];
}
// 将序列排序
sort(A.begin(), A.end());
// 统计序列中不同的数的个数
unordered_set<int> uniqueNums;
for (int i = 0; i < N; i++) {
uniqueNums.insert(A[i]);
}
// 遍历所有可能的 M 值,找到使得不同的数个数最少的 M 值
int minUniqueNums = N;
int bestM = 0;
for (int M = 1; M <= A[N-1]; M++) {
unordered_set<int> modNums;
for (int i = 0; i < N; i++) {
modNums.insert(A[i] % M);
}
int uniqueCount = modNums.size();
if (uniqueCount < minUniqueNums) {
minUniqueNums = uniqueCount;
bestM = M;
}
}
cout << minUniqueNums << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/onOP 著作权归作者所有。请勿转载和采集!