• Go-稀疏数组


    package 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}]
    }
    

      

  • 相关阅读:
    快速排序和归并排序的迭代实现
    Longest Increasing Subsequence Review
    IOCCC 1987 最佳单行代码解读
    C++类的成员函数对应的链接器符号的解析
    Scalable Global ID Generator Design
    欧拉回路 (Euler Circuit) POJ 1780
    深入理解函数内静态局部变量初始化
    memcached 线程模型
    类的加载与ClassLoader的理解
    字符集常见码表说明
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/14426506.html
Copyright © 2020-2023  润新知