数据结构之稀疏数组

稀疏数组

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

适用场景

处理方式

以二维数组为例:

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

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

}

源码与测试案例

相关推荐
艾莉丝努力练剑33 分钟前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
_殊途2 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
秋说6 小时前
【PTA数据结构 | C语言版】顺序队列的3个操作
c语言·数据结构·算法
lifallen7 小时前
Kafka 时间轮深度解析:如何O(1)处理定时任务
java·数据结构·分布式·后端·算法·kafka
risc1234568 小时前
BKD 树(Block KD-Tree)Lucene
java·数据结构·lucene
kk_stoper9 小时前
如何通过API查询实时能源期货价格
java·开发语言·javascript·数据结构·python·能源
秋说9 小时前
【PTA数据结构 | C语言版】字符串插入操作(不限长)
c语言·数据结构·算法
遇见尚硅谷11 小时前
C语言:20250714笔记
c语言·开发语言·数据结构·笔记·算法
恸流失13 小时前
java基础-1 : 运算符
java·开发语言·数据结构
yu20241114 小时前
【【异世界历险之数据结构世界(二叉树)】】
数据结构·算法