So wurde ich gebeten, diese Frage während eines Online-Interviews zu lösen und schlug fehl. Ich wurde sofort abgelehnt. Ich versuche herauszufinden, was mit meinem Algorithmus falsch war.Schreiben Sie eine Funktion, um Indizes der ersten beiden größten Zahlen zu finden
zwei größten Zahlen
In der Programmiersprache Ihrer Wahl schreiben eine Funktion, die ein Array von ganzen Zahlen und gibt die Indizes der ersten beiden größten Zahlen nimmt. Dokumentieren Sie ein spezielles Verhalten in Randfällen, falls vorhanden. Die Funktion sollte eine Laufzeit von
O(N)
haben, wobei N die Länge des Arrays undO(1)
zusätzlichen Speicherplatz ist.
ich diese Methode schrieb die Zahlen in C# sortieren:
int[] sortArrayIndicies(int[] numbers)
{
int high = int.MinValue;
int secondHigh = int.MinValue;
for(int i = 0; i < numbers.Length; i++)
{
if (numbers[i] > numbers[high])
{
secondHigh = high;
high = i;
}
else if (numbers[i] > numbers[secondHigh])
{
secondHigh = i;
}
}
return new[] {high, secondHigh};
}
Wie für spezielles Verhalten für Grenzfälle zu dokumentieren, wurde I mit folgenden reagiert:
Die hohen und den zweiten Hohe Variablen wurden für den Fall, dass die Zahlen negativ sind, auf den Wert min int initialisiert, anstatt auf den Standardwert null. Komplexität ist
O(N)
.
Wohin ging ich falsch? Ich weiß, dass die Komplexität der Zeit O(N)
ist, weil ich durch die gesamte Liste iteriere, und die Komplexität des Raums ist O(1)
wegen des kleinen (festen) Platzes für die hohen und zweiten hohen Variablen.
Wie können die Indizes 'high' und' secondHigh' auf 'int.MinValue' initialisiert werden? In solchen Situationen könnten Sie auch nach Erklärungen fragen, wie Sie mit der höchsten Nummer umgehen können. Dein Gedankenprozess zu diesem Thema ist richtig. Es ist nur die Implementierung, die schief gelaufen ist. – thebenman