Sobes.tech
Junior — Middle

Чӣ гуна аст мураккабии вақти амали ворид кардани унсурҳо ба оғоз ё дар миёнаи массиви динамикӣ?

sobes.tech AI

Ҷавоб аз AI

เวลาความซับซ้อนของการดำเนินการแทรกองค์ประกอบในต้นหรือกลางของอาเรย์แบบไดนามิกมักจะเป็น O(n) โดยที่ n คือจำนวนขององค์ประกอบในอาเรย์

นี่เป็นเพราะว่าหลังจากการแทรกแล้ว องค์ประกอบที่ตามมาทั้งหมดจะต้องถูกเลื่อนหนึ่งตำแหน่งไปทางขวาเพื่อเปิดที่ว่างสำหรับองค์ประกอบใหม่ ในกรณีที่เลวร้ายที่สุด เมื่อแทรกในต้น จะมีการเลื่อนองค์ประกอบทั้งหมด

ตัวอย่างใน Go:

package main

import "fmt"

func insertAt(slice []int, index int, value int) []int {
    slice = append(slice, 0)           // ขยาย slice
    copy(slice[index+1:], slice[index:]) // เลื่อนองค์ประกอบ
    slice[index] = value               // แทรค่าลงไป
    return slice
}

func main() {
    s := []int{1, 2, 3, 4}
    s = insertAt(s, 1, 99) // แทรก 99 ที่ตำแหน่ง 1
    fmt.Println(s)        // [1 99 2 3 4]
}