Junior — Middle
Ako efektívne odstrániť prvok zo zoznamu bez zachovania poradia prvkov, pričom neprekračujete konštantnú zložitosť operácie?
sobes.tech AI
Odpoveď od AI
Ak chcete odstrániť prvok zo sekvencie v Go bez zachovania poradia prvkov a s operáciou s konštantnou zložitosťou O(1), môžete nahradiť odstraňovaný prvok posledným prvkom sekvencie a potom sekvenciu zmenšiť o jeden.
Príklad:
func removeUnordered(s []int, i int) []int {
s[i] = s[len(s)-1] // nahradí prvok i posledným
return s[:len(s)-1] // zmenší sekvenciu
}
// Použitie:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // odstráni prvok na indexe 1 (20)
// Teraz môže byť s napríklad [10, 50, 30, 40]
Táto metóda neuchováva poradie prvkov, ale je veľmi rýchla, pretože nevyžaduje posuny prvkov.