重新整理数据结构与算法——稀疏数组[二]
2023-09-14 08:59:24 时间
前言
因为c# 算法与数据结构的非常少,大概81篇,特此整理一份,希望能帮助到初学者。
正文
有一句话说,世界上没有稀疏数组,然后呢,人定义出来了就有了。
也就是说稀疏数组是人们根据某种结构来定义这个数组有更多的含义。
职业盗图:
在一个11*11的数组中,只有几个是特殊的,其他都为0,那么自己就可以自己设计一些格式来表达这个棋盘的含义。
那么如何将这个棋盘转换成稀疏数组?
其中的一种定义是这样的:
有一个3维数组:
数组的第一行是特殊含义:
如下:
- 第一行第一列:二维数组的X轴的行数
- 第一行第二列:二位数组y轴的行数
- 第一行第三列:有多少个特殊数据
除了第一行,其他行表示的数据:第一列表示X 轴的坐标,第二列表示y轴坐标、第三列表示值。
职业盗图:
下面按照下面的思路,写一份code:
代码
首先设置一个棋盘:
static void Main(string[] args)
{
//初始化一个11*11的数组
int[,] map = new int[11,11];
map[1,2] = 1;
map[2,3] = 2;
for (int i = 0; i < 11; i++)
{
for (int j = 0; j < 11; j++)
{
Console.Write(map[i,j]+" ");
}
Console.WriteLine();
}
Console.ReadKey();
}
完整版:
static void Main(string[] args)
{
//初始化一个11*11的数组
int[,] map = new int[11,11];
map[1,2] = 1;
map[2,3] = 2;
int count = 0;
//打印棋盘
for (int i = 0; i < 11; i++)
{
for (int j = 0; j < 11; j++)
{
if (map[i, j]!=0)
{
count++;
}
Console.Write(map[i,j]+" ");
}
Console.WriteLine();
}
//转换为稀疏数组
//1.得到有多少个值count
int[,] shrinkMap = new int[count + 1, 3];
//赋值稀疏数组
shrinkMap[0, 0] = 11;
shrinkMap[0, 1] = 11;
shrinkMap[0, 2] = count;
//当前第几行
int curLine = 0;
//赋值稀疏数组
for (int i = 0; i < 11; i++)
{
for (int j = 0; j < 11; j++)
{
if (map[i, j] != 0)
{
curLine++;
shrinkMap[curLine, 0] = i;
shrinkMap[curLine, 1] = j;
shrinkMap[curLine, 2] = map[i, j];
}
}
}
//打印稀疏数组
Console.WriteLine("开始打印稀疏数组");
for (int i = 0; i < count+1; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(shrinkMap[i, j] + " ");
}
Console.WriteLine();
}
// 稀疏数组还原
int[,] map2 = new int[11,11];
for (int i = 1; i < count + 1; i++)
{
for (int j = 0; j < 3; j++)
{
map2[shrinkMap[i, 0], shrinkMap[i, 1]] = shrinkMap[i, 2];
}
}
//打印map2
Console.WriteLine("开始打印还原后的棋盘");
for (int i = 0; i < 11; i++)
{
for (int j = 0; j < 11; j++)
{
if (map2[i, j] != 0)
{
count++;
}
Console.Write(map2[i, j] + " ");
}
Console.WriteLine();
}
Console.ReadKey();
}
相关文章
- Java实现 LeetCode 561 数组拆分 I(通过排序算法改写PS:难搞)
- Java实现 蓝桥杯 算法提高 数组求和
- Java实现 蓝桥杯 算法训练 删除数组零元素
- Java实现 蓝桥杯 算法训练 寻找数组中最大值
- POJ 1631 Bridging signals(LIS O(nlogn)算法)
- 重新整理数据结构与算法——数组模拟栈[六]
- 数据结构与算法之美-2 数组和链表 [MD]
- 重新整理数据结构与算法——数组模拟栈[六]
- 重新整理数据结构与算法——数组模拟队列和环形队列[三]
- [YOLOv8/YOLOv7/YOLOv5系列算法改进NO.5]改进特征融合网络PANET为BIFPN(更新添加小目标检测层yaml)
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
- PHP面试题:写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())
- 智能优化算法应用:基于麻雀搜索算法PID参数优化 - 附代码
- 1338. 数组大小减半-排序加贪心算法
- 面试题 01.02. 判定是否互为字符重排-辅助数组算法
- 12.4 Borüvka算法
- 机器学习——EM算法
- KMP模式匹配算法改进---nextval数组
- 【数据结构与算法】线性表--数组
- 数据结构和算法 最大和连续子数组
- Python ---- 算法入门(2)分治算法解决【找数组的最大值和最小值】问题