Per Codefighters:Beschleunigung Swift CodeFight Herausforderung
Hinweis: Um eine Lösung mit O (n) Zeit Komplexität und O (1) zusätzlichem Raum Komplexität schreiben, da dies ist, was Sie bei einem echten Interview dazu aufgefordert werden würden .
Geben Sie für ein Array a, das nur Zahlen im Bereich von 1 bis a.length enthält, die erste doppelte Zahl an, für die das zweite Vorkommen den minimalen Index hat. Mit anderen Worten, wenn es mehr als 1 doppelte Nummern gibt, geben Sie die Zahl zurück, für die das zweite Vorkommen einen kleineren Index hat als das zweite Vorkommen der anderen Nummer. Wenn keine solchen Elemente vorhanden sind, geben Sie -1 zurück.
Beispiel
Für a = [2, 3, 3, 1, 5, 2], sollte die Ausgabe firstDuplicate sein (a) = 3.
sind 2 Dubletten: Zahlen 2 und 3 Das zweite Vorkommen von 3 hat einen kleineren Index als das zweite Vorkommen von 2, also lautet die Antwort 3.
Für a = [2, 4, 3, 5, 1] sollte der Ausgang firstDuplicate sein (a) = -1.
Also hier ist, was ich gefunden habe. Es funktioniert, aber scheitert am letzten Test, weil es über 4000ms lief. Ich bleibe bei dem, was ich noch tun kann. Irgendwelche Ideen, um die Geschwindigkeit zu verbessern?
func firstDuplicate(a : [Int]) -> Int {
var duplicateIndexArray = [Int]()
for firstIndex in 0..<a.count {
for secondIndex in 0..<a.count {
if a[firstIndex] == a[secondIndex] && firstIndex != secondIndex {
print(firstIndex, secondIndex)
if !(duplicateIndexArray.contains(firstIndex)){
duplicateIndexArray.append(secondIndex)
break
}
}
}
}
// Check for duplicacy
if duplicateIndexArray.count > 0 {
print(duplicateIndexArray)
return a[duplicateIndexArray.min()!]
}
return -1
}