gpt4 book ai didi

c++ - 更优雅的方法来检查 C++ 数组中的重复项?

转载 作者:IT老高 更新时间:2023-10-28 22:15:52 26 4
gpt4 key购买 nike

我在 C++ 中编写了这段代码,作为 uni 任务的一部分,我需要确保数组中没有重复项:

// Check for duplicate numbers in user inputted data
int i; // Need to declare i here so that it can be accessed by the 'inner' loop that starts on line 21
for(i = 0;i < 6; i++) { // Check each other number in the array
for(int j = i; j < 6; j++) { // Check the rest of the numbers
if(j != i) { // Makes sure don't check number against itself
if(userNumbers[i] == userNumbers[j]) {
b = true;
}
}
if(b == true) { // If there is a duplicate, change that particular number
cout << "Please re-enter number " << i + 1 << ". Duplicate numbers are not allowed:" << endl;
cin >> userNumbers[i];
}
} // Comparison loop
b = false; // Reset the boolean after each number entered has been checked
} // Main check loop

效果很好,但我想知道是否有更优雅或更有效的检查方式。

最佳答案

您可以在 O(nlog(n)) 中对数组进行排序,然后简单地查看直到下一个数字。这比您现有的 O(n^2) 算法快得多。代码也干净了很多。您的代码也不能确保在重新输入时没有插入重复项。您首先需要防止重复存在。

std::sort(userNumbers.begin(), userNumbers.end());
for(int i = 0; i < userNumbers.size() - 1; i++) {
if (userNumbers[i] == userNumbers[i + 1]) {
userNumbers.erase(userNumbers.begin() + i);
i--;
}
}

我还建议使用 std::set - 那里没有重复项。

关于c++ - 更优雅的方法来检查 C++ 数组中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com