Skip to content

数组 ​

基础与数据结构

说明 ​

连续存放同类值并按下标访问;访问 O(1),中间插入需要移动元素。

分析 ​

Go 切片提供连续下标访问,append 可能因容量不足而分配新底层数组。示例先扩展长度,再用 copy 将插入位置后的元素右移。

先扩展长度,再右移插入位置后的元素,最后写入2。移动量是旧长度减插入下标;均摊常数的尾部追加并不保证每次扩容都只花常数时间。

查看图表代码

适用前提与边界 ​

插入下标必须在合法范围内;频繁在中间插入时,移动成本可能比查找成本更重要。 空切片允许在下标0插入;其他插入位置须满足0≤i≤len(a)。append可能使底层数组改变,调用方必须接收返回切片。

示例输入与调用 ​

go
fmt.Println(Insert([]int{1, 3}, 1, 2))

运行输出 ​

text
[1 2 3]

完整 Go 示例 ​

go
package main

import "fmt"

func Insert(a []int, i, value int) []int {
	a = append(a, 0)
	copy(a[i+1:], a[i:])
	a[i] = value
	return a
}

func main() {
	fmt.Println(Insert([]int{1, 3}, 1, 2))
}

继续阅读