数据结构与算法(Java版)_02_SparseArray稀疏数组
2021/10/18 20:09:40
本文主要是介绍数据结构与算法(Java版)_02_SparseArray稀疏数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
稀疏数组使用场景:
当一个二维数组中很多元素为0或为同一个值时,可以用稀疏数组保存该数组。
稀疏数组使用方法
1.先统计原二维数组行和列数,以及有多少个不为0的数或多少个不同的数。
2.创建一个二维数组作为稀疏数组,第一行分别存放行数、列数、多少个不为0的数或多少个不同的数。
3.遍历数组,将每个不为0的数或每个不同的数的行标、列标、值分别存放到稀疏数组中。
使用Java代码实现:
public static void main(String[] args) { //创建棋盘并初始化棋子位置,1代表黑子,2代表蓝子 int[][] chessBoard = new int[11][11]; chessBoard[1][1] = 1; chessBoard[2][2] = 2; chessBoard[4][7] = 2; //统计非零数据总数 int notZeros = 0; for(int[] row : chessBoard) { for(int element : row) { if(0!=element) notZeros++; } } //创建稀松数组并赋值 int[][] sparseArr= new int[notZeros+1][3]; sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = notZeros; int count = 0; for(int i=0;i<chessBoard.length;i++) { for(int j=0;j<chessBoard[0].length;j++) { if(0!=chessBoard[i][j]) { count++; sparseArr[count][0] = i; sparseArr[count][1] = j; sparseArr[count][2] = chessBoard[i][j]; } } } //解析稀松数组为普通数组 int newRow = sparseArr[0][0]; int newCol = sparseArr[0][1]; int[][] chessBoard1 = new int[newRow][newCol]; for(int i=1;i<sparseArr.length;i++) { int row1 = sparseArr[i][0]; int col1 = sparseArr[i][1]; int val = sparseArr[i][2]; chessBoard1[row1][col1] = val; } sop("初始棋盘为:\n",""); //打印棋盘 for(int[] row : chessBoard) { for(int element : row) { sop("%d ",element); } sop("\n",""); } sop("存储棋盘的稀松数组为:\n",""); //打印稀松数组 for(int[] row : sparseArr) { for(int element : row) { sop("%d ",element); } sop("\n",""); } sop("稀松数组转棋盘为:\n",""); //打印棋盘 for(int[] row : chessBoard1) { for(int element : row) { sop("%d ",element); } sop("\n",""); } //sop("%d",notZeros); } public static void sop(String str,Object obj1) { System.out.printf(str,obj1); } }
实现效果:
public static void main(String[] args) {
//创建棋盘并初始化棋子位置,1代表黑子,2代表蓝子
int[][] chessBoard = new int[11][11];
chessBoard[1][1] = 1;
chessBoard[2][2] = 2;
chessBoard[4][7] = 2;
//统计非零数据总数
int notZeros = 0;
for(int[] row : chessBoard) {
for(int element : row) {
if(0!=element) notZeros++;
}
}
//创建稀松数组并赋值
int[][] sparseArr= new int[notZeros+1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = notZeros;
int count = 0;
for(int i=0;i<chessBoard.length;i++) {
for(int j=0;j<chessBoard[0].length;j++) {
if(0!=chessBoard[i][j]) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessBoard[i][j];
}
}
}
//解析稀松数组为普通数组
int newRow = sparseArr[0][0];
int newCol = sparseArr[0][1];
int[][] chessBoard1 = new int[newRow][newCol];
for(int i=1;i<sparseArr.length;i++) {
int row1 = sparseArr[i][0];
int col1 = sparseArr[i][1];
int val = sparseArr[i][2];
chessBoard1[row1][col1] = val;
}
sop("初始棋盘为:\n","");
//打印棋盘
for(int[] row : chessBoard) {
for(int element : row) {
sop("%d ",element);
}
sop("\n","");
}
sop("存储棋盘的稀松数组为:\n","");
//打印稀松数组
for(int[] row : sparseArr) {
for(int element : row) {
sop("%d ",element);
}
sop("\n","");
}
sop("稀松数组转棋盘为:\n","");
//打印棋盘
for(int[] row : chessBoard1) {
for(int element : row) {
sop("%d ",element);
}
sop("\n","");
}
//sop("%d",notZeros);
}
public static void sop(String str,Object obj1) {
System.out.printf(str,obj1);
}
这篇关于数据结构与算法(Java版)_02_SparseArray稀疏数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性
- 2024-05-29哪些无用敏捷指标正在破坏敏捷转型?
- 2024-05-29鸿蒙原生应用再新丁!新华社 入局鸿蒙
- 2024-05-29设计模式 之 迭代器模式(Iterator)