ho scritto questo codice in C++ come parte di un compito uni in cui ho bisogno per garantire che non vi siano duplicati all'interno di un array:Un modo più elegante di controllare i duplicati nell'array C++?
// 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
Funziona perfettamente, ma mi piacerebbe sapere se c'è un modo più elegante o efficiente per controllare.
Ma se l'ordinamento è O (n * log (n)) e quindi devi fare un controllo O (n) dell'array per trovare i duplicati dopo non è la tua complessità allora O (n^2 * log (n))? – Goz
No, è O (n * log (n) + n) - si ordina POI si cerca, non si ordina E si cerca ogni operazione del tipo. – Puppy
Questo è sicuramente più veloce quando 6 si avvicina all'infinito ;-) –