Sobes.tech
Junior — Middle

Elementni tartibni saqlamay, lekin operatsiya murakkabligini oshirmasdan, qanday qilib samarali tarzda slice'dan elementni olib tashlash mumkin?

sobes.tech AI

AIdan javob

Go tilida slice-dan elementni o'zgartirish uchun, elementlarni tartibini saqlamasdan va doimiy murakkablik O(1) bilan, o'chiriladigan elementni slice-ning oxirgi elementi bilan almashtirib, so'ngra slice-ning uzunligini birga qisqartirish mumkin.

Misol:

func removeUnordered(s []int, i int) []int {
    s[i] = s[len(s)-1] // i elementini oxirgi element bilan almashtiradi
    return s[:len(s)-1] // slice-ning uzunligini qisqartiradi
}

// Foydalanish:
s := []int{10, 20, 30, 40, 50}
s = removeUnordered(s, 1) // indeks 1 (20) elementini o'chiradi
// Endi s, masalan, [10, 50, 30, 40] bo'lishi mumkin

Bu usul elementlarning tartibini saqlamaydi, lekin juda tez ishlaydi, chunki elementlarni siljitishga ehtiyoj yo'q.