数据结构之稀疏数组

稀疏数组

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

适用场景

处理方式

以二维数组为例:

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

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

}

源码与测试案例

相关推荐
程序员阿鹏8 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
郝学胜-神的一滴10 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio
2601_9657422210 小时前
全媒体运营与短视频代运营,两者有什么区别?
大数据·数据结构·人工智能·算法·ai·媒体
彧azz11 小时前
数据结构:关于图的学习
c语言·数据结构·笔记·学习·算法
彧azz12 小时前
二叉搜索树学习记录
c语言·数据结构·笔记·算法
suhan13 小时前
【数据结构】二、线性表:2.单链表的定义与实现(带头结点与不带头结点的区别)
数据结构
AgentMaster16 小时前
数据治理工具选型指南:一套可复用的四阶段决策框架
大数据·数据结构·人工智能·算法
不会就选b17 小时前
数据结构之树&&二叉树(四)
数据结构·算法
find1star18 小时前
LeetCode 25:K 个一组翻转链表
java·数据结构·算法·leetcode·链表·职场和发展·动态规划
ysu_031418 小时前
13-图的基础:存储与表示
数据结构·