1.稀疏算法的目的就是储存的时候,不用储存那么多,节省空间(时间换空间)。 【数组|二、数据结构与算法 稀疏数组】稀疏数组:就是无效值(可以是规定值吧,相同的比较多)比较多,很稀疏,其实就是把原来的数组(这个数组有多个相同的值,这里是0,因为默认值为0,无值的情况默认0,不用设置值,而其他的值要设置值),通过规律来创建一个新的数组(值较少,且可以按一定规律还原为原数组),然后储存起来,然后。
思路如下:
原数组–》稀疏数组–》储存–》拿出来–》还原–》使用。
文章图片
其中下面的表示原数组
文章图片
下面的表示稀疏数组
文章图片
文章图片
代码(储存省略):
public class SparseArray2 {
public static void main(String[] args) {
int chessArr1[][]=new int[11][11];
chessArr1[1][2]=1;
chessArr1[2][3]=2;
for (int[] ints : chessArr1) {
System.out.println();
for (int anInt : ints) {
System.out.printf("%d\t",anInt);
}
}
/**
* 先获取有效值,这里是2个
* 对整个数组进行遍历,比较是否为0,来判断值
*/
int count=0;
for (int[] ints : chessArr1) {
for (int anInt : ints) {
if (anInt!=0) {
count++;
}
}
}
System.out.println("\n有效值的个数:"+count);
//设置稀疏数组的行与列
int sparseArr[][]=new int[count+1][3];
//todo 赋值
//第一行的值
sparseArr[0][0]=chessArr1.length;
sparseArr[0][1]=chessArr1[0].length;
sparseArr[0][2]=count;
//剩下行的值
for (int i = 0;
i < 11;
i++) {
for (int j = 0;
j < 11;
j++) {
if (chessArr1[i][j]!=0) {
sparseArr[i][0]=i;
sparseArr[i][1]=j;
sparseArr[i][2]=chessArr1[i][j];
}
}
}
//打印稀疏数组
System.out.println("打印稀疏数组");
for (int[] ints : sparseArr) {
System.out.println();
for (int anInt : ints) {
System.out.printf("%d\t",anInt);
}
}
//todo 恢复回去
//大致行与列
int renew[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
//赋值
for (int i = 1;
i < sparseArr.length;
i++) {
int i0 = sparseArr[i][0];
int i1 = sparseArr[i][1];
int i2 = sparseArr[i][2];
renew[i0][i1]=i2;
}
System.out.println("\n打印稀疏数组还原");
for (int[] ints : renew) {
System.out.println();
for (int anInt : ints) {
System.out.printf("%d\t",anInt);
}
}}
}
推荐阅读
- leetcode刷题实录|leetcode226 翻转二叉树
- 数据结构|Leetcode226翻转二叉树
- leetcode|LeetCode226翻转二叉树(递归)
- 算法学习|最近公共祖先之树上倍增求法
- 蓝桥杯|蓝桥杯素数(二)
- 春招|【Android春招每日一练】(三十二) LeetCode Hot 10题
- 春招|【Android春招每日一练】(三十四) LeetCode Hot 5题+总结(完)
- Android|关于 Gradle 你应该知道的知识点
- Android|实例说明 Android 多线程、多进程与全局变量之间的关系