Sobes.tech
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.