数组
基础与数据结构
说明
连续存放同类值并按下标访问;访问 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))
}继续阅读
- 系统学习
- 系统学习
- 系统学习