19 数组 稀疏数组 稀疏数组介绍 代码
2023-09-11 14:16:44 时间
稀疏数组
概念
- 稀疏数组的是一个数据结构
- 需求:编写五子棋游戏中,有存盘退出和续上盘的功能。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b8j5DwEr-1645802026222)(E:\aChihiro\MD文件夹\开发区\存档文档\image-20220225184142453.png)]
-
分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据。
-
解决:稀缺数组
稀疏数组介绍
- 当一个数组中大部分元素为0,或则为同一值的数组时,可以使用稀疏数组来保存该数组。
- 稀疏数组的处理方式是:
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
- 如下图:左边是原始数组,右边是稀疏数组
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L842nSc0-1645802026223)(E:\aChihiro\MD文件夹\开发区\存档文档\image-20220225184657970.png)]
代码
// 1、创建一个二维数组 11*11 0:没有旗子; 1:黑棋 2:白棋
int[] array1 = newe int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
// 输出原始的数组
System.out.println("输出原始的数组");
for (int[] ints : array1){
for (int anInt :ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
// 转换成稀疏数组保存
// 获取有效值的个数
int sum = 0;
for(int i=0; i<11; i++){
for(int j=0; j<11; j++){
if(array1[i][j]!=0){
sum++;
}
}
System.out.println("有效值的个数:"+sum);
}
// 2、创建一个稀疏数组的数组
int[][] array2 = new int[sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
// 遍历二维数组,将非零的值,存放稀疏数组数组中
int count = 0;
for (int i =0; i < array1.length; i++){
for (int j =0; j < array1[i].length; j++){
if(array1[i][j]!=0){
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];
}
}
}
// 输出稀疏数组
System.out.println("输出稀疏数组");
for(int i =0; i < array2.length; i++){
System.out.print(
array2[i][0]+"\t"
+array2[i][1]+"\t"
+array2[i][2]+"\t"
);
}
// =============
// 1、读取稀疏数组
int[][] array3 = new int[array2[0][0]][array2[0][1]];
// 2、给其中的元素还原它的值
for(int i =1;i < array2.length; i++){
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
// 3、打印
// 输出还原的数组
System.out.println("输出还原的数组");
for (int[] ints : array1){
for (int anInt :ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
相关文章
- Matlab中基本运算的兼容数组大小
- Matlab中字符串数组和字符数组中的文本
- axios 参数对象的值为数组时,后端无法接收(待解决)
- Python标准库中的列表(list、数组)操作汇总(大约25种操作),附示例代码
- C#,实用代码——运算符重载、泛型与加强版的数组Array
- 【C / C++】关于数组太大在编译器不能运行问题
- JS中数组去重的几种方法
- 《Python数据分析》一2.2 创建多维数组
- 面试常客之数组扁平化(手撕代码篇)
- java数组的使用
- 编写一个 Python 代码以按第 n 列对 NumPy 中的数组进行排序?
- JS 数组去重的多种方法
- C语言:sizeof和strlen计算有关数组字节大小
- 【php】 jsonp转数组函数jsonp_decode
- [LeetCode]167. 两数之和 II - 输入有序数组
- 自出题:二叉树数组转换为生成代码
- 一个系列带你搞定前端面试的手写代码环节(6) --- 数组扁平化
- 一个系列带你搞定前端面试的手写代码环节(5) --- 数组去重
- jquery之$.each用法(组织数组对象及json对象)
- Golang MongoDB Driver 更新符合条件的数组元素的字段
- 408 | 数据结构代码算法题模板技巧 之 顺序表(数组)
- LeetCode004之寻找两个有序数组的中位数(相关话题:二分法,双指针)
- 华为OD机试 - 合并数组(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
- 华为OD机试 - 数组编写函数(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
- 华为OD机试 -数组组成的最小数字(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
- 华为OD机试 - 合并数组(Python) | 机试题+算法思路+考点+代码解析 【2023】
- 华为OD机试 - 求数组中最大n个数和最小n个数的和(Python) | 机试题+算法思路+考点+代码解析 【2023】
- 《C#零基础入门之百识百例》(二十三)数组排序 -- 选择排序
- 连续子数组的最大和
- C# 逗号分隔的字符串转数组,string数组转int数组