数据结构之稀疏数组

稀疏数组

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

适用场景

处理方式

以二维数组为例:

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

● 稀疏数组列数固定为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;
    }

}

源码与测试案例

相关推荐
Fanxt_Ja2 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
今后1232 天前
【数据结构】二叉树的概念
数据结构·二叉树
散1123 天前
01数据结构-01背包问题
数据结构
消失的旧时光-19433 天前
Kotlinx.serialization 使用讲解
android·数据结构·android jetpack
Gu_shiwww3 天前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步
苏小瀚3 天前
[数据结构] 排序
数据结构
睡不醒的kun3 天前
leetcode算法刷题的第三十四天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
吃着火锅x唱着歌3 天前
LeetCode 978.最长湍流子数组
数据结构·算法·leetcode
Whisper_long3 天前
【数据结构】深入理解堆:概念、应用与实现
数据结构
IAtlantiscsdn3 天前
Redis7底层数据结构解析
前端·数据结构·bootstrap