首页 > 其他分享 >go 稀疏数组

go 稀疏数组

时间:2022-09-25 22:35:05浏览次数:42  
标签:sparseArray fmt 稀疏 数组 go col row

 

稀疏数组实现:

package main

import "fmt"

type SparseArray struct {
	col   int
	row   int
	value int
}

func main() {
	// 源数据格式:
	/*
		0       0       0       2       0       0       0       0       0       0
		0       0       1       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
	*/

	va := [10][10]int{}
	va[0][3] = 2
	va[1][2] = 1

	fmt.Println("原稀疏数组")
	for _, v := range va {
		for _, v2 := range v {
			fmt.Printf("%d\t", v2)
		}
		fmt.Printf("\n")
	}

	// 生成稀疏数组
	var sparseArray []SparseArray
	baseArray := SparseArray{
		col:   11,
		row:   11,
		value: 0,
	}
	sparseArray = append(sparseArray, baseArray)
	for i, v := range va {
		for j, v2 := range v {
			if v2 != 0 {
				var array = SparseArray{
					col:   i,
					row:   j,
					value: v2,
				}
				sparseArray = append(sparseArray, array)
			}
		}
	}
	// 打印稀疏数组
	fmt.Printf("稀疏数组: %v\n", sparseArray)

	// 恢复稀疏数组
	// 1、先获取x轴、y轴及默认值val
	baseNum := sparseArray[0]
	fmt.Printf("x轴:  %d\ny轴:  %d\n默认值val: %d\n", baseNum.col, baseNum.row, baseNum.value)
	x := baseNum.col
	y := baseNum.row
	val := baseNum.value

	// 2、 恢复
	for i := 0; i < x; i++ {
		for j := 0; j < y; j++ {
			// 获取稀疏数组中的数据,防止下标溢出
			if i+1 < len(sparseArray) {
				array := sparseArray[i+1]
				// 当col 和 row 与稀疏数组中的col、row对应时,打印value值
				if array.col == i && array.row == j {
					fmt.Printf("%d\t", array.value)
				} else {
					// 其他情况下值为:默认值
					fmt.Printf("%d\t", val)
				}
			} else {
				fmt.Printf("%d\t", val)
			}
		}
		println("")
	}
	// 可以考虑落盘(先把稀疏数组写入文件,再从文件中读出)
}

  

 

标签:sparseArray,fmt,稀疏,数组,go,col,row
From: https://www.cnblogs.com/TF511/p/16729228.html

相关文章

  • 【mongo 系列】聚合知识点梳理
    什么是聚合数据?我们先来看看是是聚合数据数据聚合(DataAggregation)是指合并来自不同数据源的数据。.聚类也称聚类分析,亦称为群集分析,是对于统计数据分析的一门技术,在......
  • Django项目在现有的数据表中新增字段
    models.py文件1classUserInfo(AbstractUser):2phone=models.CharField(max_length=11)3addr=models.CharField(max_length=128)4avatar=model......
  • 怎么写出数组扁平化?如何手写flat函数
    手写一下数组扁平化flat(),但是发现居然没有一个能够完成写出来,所以打算总结一下如果遇到了数组扁平化的题目(也可以叫做手动封装flat()方法),到底应该怎么写,怎么写可......
  • js数组去重的方法
    一、利用Set()+Array.from()Set对象:是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即Set中的元素是唯一的。Array.from() 方法:对一个类似数组......
  • 数组遍历的方法
    数组遍历的方法forEach类似与for循环不会改变原数组将数组中的2全部加1constarr=[1,2,3,2]varnewArr=[]arr.forEach(v=>{if(v===2){v=v+1}......
  • 【golang】json数据解析 - 嵌套json解析
    @目录1.通过结构体映射解析2.嵌套json解析-map1.通过结构体映射解析原数据结构解析//结构体typecontractJsonstruct{ Data[]transaction`json:"data"` T......
  • 【C++】从零开始的CS:GO逆向分析1——寻找偏移与基址的方法
    【C++】从零开始的CS:GO逆向分析1——寻找偏移与基址的方法 前言:此文章主要用于提供方法与思路,fps游戏基本都能如此找偏移,文章里找的偏移比较少,主要用来演示寻找思路,文......
  • Mongo安装及基本命令
    一、MongoDB介绍MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,其将数据存储为一个文档,数据结构由键值对形式表示,文档型类似json对象,字段值可以包含其他文档,......
  • 记录黑苹果OpenCore 安装-v跑码结束显示logo、进度条、光标,但不进入系统问题
    型号:Dell Inspiron15-3559    核显:HD520OS版本: macOSCatalina10.15.6(19G2021) 问题-v模式启动,跑码结束,显示苹果logo和进度条,鼠标光标正常显示,连......
  • Go 语言学习笔记(八): Pointers
    GO语言中是有指针的概念的.下面我们来看看怎么搞一个指针:varp*int这句话其实非常精准的介绍了指针的声明方式:Thetype*TisapointertoaTvalue.Itszero......