数据结构之稀疏数组

稀疏数组

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

适用场景

处理方式

以二维数组为例:

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

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

}

源码与测试案例

相关推荐
050208103 分钟前
各种排序算法
数据结构·算法·排序算法
purrrew4 分钟前
【数据结构_6】双向链表的实现
java·数据结构·链表
bing_1585 分钟前
Redis 的不同数据结构分别适用于哪些微服务场景
数据结构·redis·微服务
strive-debug2 小时前
上篇:《排序算法的奇妙世界:如何让数据井然有序?》
数据结构·算法·排序算法
PHASELESS4112 小时前
Java堆结构深度解析:原理、实现与应用全指南
java·开发语言·数据结构
杀神lwz3 小时前
数据结构和算法(六)--栈&队列&堆
数据结构
ん贤3 小时前
图论基础理论
c语言·数据结构·c++·算法·图论
小哲会魔法4 小时前
冒泡排序、插入排序、快速排序、堆排序、希尔排序、归并排序
数据结构·算法·排序算法
Dreams_l5 小时前
顺序表(Arraylist)和链表(Linkedlist)
数据结构·链表
Dominic_Holmes6 小时前
代码随想录算法训练营Day30 | 01背包问题(卡码网46. 携带研究材料)、Leetcode416.分割等和子集
数据结构·python·算法·leetcode