Go-稀疏数组
2021-03-01 19:28
标签:相同 包含 第一个 pen 转化 int 数据格式 不重复 var Go-稀疏数组 标签:相同 包含 第一个 pen 转化 int 数据格式 不重复 var 原文地址:https://www.cnblogs.com/2bjiujiu/p/14426506.htmlpackage main
import "fmt"
// 稀疏数组
// 1. 二维数组
// 2. 存在大量相同相同数据和少量不同数据
// 思维: 将大量相同数据转化为: (数据: 频率 或 位置) 的数据格式以简化稀疏数组的存储
// ValNode 值节点,包含行、列、值
type ValNode struct {
Row int
Col int
Val int
}
func main() {
// 1. 初始化原始数据
var chess [11][11]int
chess[1][1] = 1
chess[2][2] = 2
// 2. 遍历这个二维数据
for _, v := range chess {
for _, v2 := range v {
fmt.Printf("%v ", v2)
}
fmt.Println()
}
//0 0 0 0 0 0 0 0 0 0 0
//0 1 0 0 0 0 0 0 0 0 0
//0 0 2 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
// 3.转化为稀疏数组
// 分析得知: 原始数组 chess 是11行11列的数据,大量重复原始是0,少量不重复元素是1 2
var spareArray []ValNode
// 1. 添加第一个元素,包含原始数组的行、列、大量数据的值
rootValNode := ValNode{
Row: 11,
Col: 11,
Val: 0,
}
spareArray = append(spareArray, rootValNode)
// 2. 遍历二维数组,进行转换
for row, v := range chess {
for col, v2 := range v {
if v2 != 0 {
valNode := ValNode{
Row: row,
Col: col,
Val: v2,
}
spareArray = append(spareArray, valNode)
}
}
}
// 3. 输出最后的稀疏数组值
fmt.Println(spareArray)
// [{11 11 0} {1 1 1} {2 2 2}]
}