数据结构之稀疏数组

稀疏数组

特殊的数据结构,其特点是大部分元素为同一值。

适用场景

处理方式

以二维数组为例:

● 遍历原始二维数组,查询出不同的值

● 稀疏数组列数固定为3

● 第一行记录原始二维数组的行数、列数、不同值的个数

● 第二行开始记录不同值的行索引、列索引、值

代码实现

java 复制代码
package org.example.data.structure.sparsearray;

/**
 * 稀疏数组, 包含两部分实现:
 * 1. 将11*11的二维数组包含(1,2),(2,3)的数据保存至稀疏数组中
 * 2. 将1中的稀疏数组还原至原来的数组
 *
 * @author xzy
 * @since 2024/8/25 9:27
 */
public class SparseArray {

    public int[][] convertToSparseArray(int[][] simpleArray) {
        // 省略判空条件
        int sum = 0;
        for (int[] ints : simpleArray) {
            for (int anInt : ints) {
                if (anInt != 0) {
                    sum++;
                }
            }
        }
        // 稀疏数组针对二维数组, 列数固定为3. 初始化二维数组
        int[][] sparseArray = new int[sum + 1][3];
        // 初始化第一行
        sparseArray[0][0] = simpleArray.length;
        sparseArray[0][1] = simpleArray[0].length;
        sparseArray[0][2] = sum;
        int index = 1;
        for (int i = 0; i < simpleArray.length; i++) {
            for (int j = 0; j < simpleArray[i].length; j++) {
                if (simpleArray[i][j] != 0) {
                    sparseArray[index][0] = i;
                    sparseArray[index][1] = j;
                    sparseArray[index][2] = simpleArray[i][j];
                    index++;
                }
            }
        }
        return sparseArray;
    }

    public int[][] convertToSimpleArray(int[][] sparseArray) {
        // 省略判空
        int row = sparseArray[0][0];
        int col = sparseArray[0][1];
        int[][] simpleArray = new int[row][col];

        // 填充二维数组
        for (int i = 1; i < sparseArray.length; i++) {
            int rowIndex = sparseArray[i][0];
            int colIndex = sparseArray[i][1];
            simpleArray[rowIndex][colIndex] = sparseArray[i][2];
        }

        return simpleArray;
    }

}

源码与测试案例

相关推荐
1nullptr2 小时前
三次翻转实现数组元素的旋转
数据结构
TT哇2 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
A懿轩A2 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
1 9 J3 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
汝即来归3 小时前
选择排序和冒泡排序;MySQL架构
数据结构·算法·排序算法
aaasssdddd966 小时前
C++的封装(十四):《设计模式》这本书
数据结构·c++·设计模式
芳菲菲其弥章7 小时前
数据结构经典算法总复习(下卷)
数据结构·算法
yyyyyyykk7 小时前
数据结构--链表
数据结构·链表
我是一只来自东方的鸭.7 小时前
1. K11504 天平[Not so Mobile,UVa839]
数据结构·b树·算法
武昌库里写JAVA8 小时前
使用React Strict DOM改善React生态系统
数据结构·vue.js·spring boot·算法·课程设计