首页 > 其他分享 >稀疏数组

稀疏数组

时间:2023-09-21 12:56:31浏览次数:32  
标签:int array2 array1 稀疏 数组 sum

稀疏数组
稀疏数组介绍

当一个数组中大部分元素为0,或为同一值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方式是:

记录数组一共有几行几列,有多少个不同值

把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

public class arrayDemo9 {
    public static void main(String[] args) {
        int [][] array1 = new int[11][11];
        array1[9][2] = 1;
        array1[10][1] = 2;
        //获取有效值的个数
        int sum =getSum(array1);
        System.out.println("打印array1原始数组,array1数组的有效个数为:" + sum);
        printArrays(array1);
        System.out.println("打印保存array1数组中有效值的array2数组:");
        //创建一个稀疏数组的数组array2用于保存array1的有效数值,稀疏数组有行,列,值三列,所以创建稀疏数组是固定的第3列,行数=表头一行+实际的有效个数,所以是sum+1
        int [][] array2 = new int[sum + 1][3];
        saveArray1(array1,array2,sum);
        printArrays(array2);
        System.out.println("还原array2数组存入array3:");
        //创建array3数组用于存放array2还原的数据
        int [][] array3 = new int[array2[0][0]][array2[0][1]];
        reverseArray1(array2,array3);
        printArrays(array3);
    }
    public static int [][] saveArray1(int [][] array1,int [][] array2,int sum){
        //为稀疏数组的表头赋值,第一行存放array1数组的行,列,有效个数
        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;
        //从array1数组中取到有效值存入array2中
        int count = 0;
        for (int i = 0; i < array1.length; i++) {
            for(int j = 0;j<array1[i].length;j++){
                if(array1[i][j] !=0){
                    count ++;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];
                }
            }
        }
        return array2;
    }

    public static int getSum(int [][] array1){
        //转换为稀疏数组保存
        //获取有效值的个数
        int sum = 0;
        for (int i = 0; i < array1.length; i++) {
            for(int j = 0;j < array1[i].length;j++){
                if(array1[i][j] !=0){
                    sum ++;
                }
            }
        }
        return sum;
    }
    //array2还原存入array3
    public static int [][] reverseArray1(int [][] array2,int [][] array3){
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        return array3;
    }
    //打印二维数组
    public static void printArrays(int [][] arrays){
        for (int[] ints : arrays) {
            for (int anInt : ints) {
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }
    }
}

标签:int,array2,array1,稀疏,数组,sum
From: https://www.cnblogs.com/sara0618/p/17719695.html

相关文章

  • 【js】数组的几个常用方法
    filter、map、forEachfilterfilter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。注意:filter()不会对空数组进行检测。注意:filter()不会改变原始数组。语法:array.filter(function(currentValue,index,arr),thisValue)参数说明......
  • 数组变异方法和非变异方法的总结
    区别:1.操作数组的方法中,分为变异方法和非变异方法。2.其中,变异方法意味着会改变原数组,而非变异方法则只会返回一个新数组,不会修改原始数组数组变异方法:push()//数组尾部追加一个元素pop()//数组尾部弹出一个元素shift()//数组头部弹出一个元素unshift()//数组头部插入一个......
  • 树状数组
    树状数组(\(\text{fenwicktree}\))是主要用于前缀信息维护的一维数组——《信息学奥林匹克辞典》基础树状数组维护信息维护一个数列的元素的操作可进行的操作单点修改,即修改数列中其中一个元素的值区间查询,即查询数列中连续一段区间的值进行某种运算存储方法......
  • JavaScript数组filter方法
    1.数组filter方法作用筛选数组,将满足条件的元素放入新数组中2.语法:array.filter(function(item,index,arr){})第一个参数:item,必须,当前元素的值第二个参数:index,可选,当前元素在数组中的索引值第三个参数:arr,当前元素所处的数组对象3.filter方法特点(1)函......
  • ES6中数组新增了的扩展
    扩展运算符的应用ES6通过扩展元素符...,比如 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列console.log(...[1,2,3])//123console.log(1,...[2,3,4],5)//12345[...document.querySelectorAll('div')]//[<div>,<div>,<div>]主要用于函数调用的时候......
  • javascript处理数组
     letdata=[{"subject_id":948,"xmdw":"长春市实验中学","sbnd":2023,"xmmc":"长春市实验中学食堂厨具设备更换项目"},{"subject_id":949,"x......
  • 算法学习 |Day 1 数组基础 704. 二分查找,27. 移除元素
    704.二分查找思路:二分查找的前置条件是数组有序且无重复元素,每次通过改变边界值来缩小查找范围。自己写的:可以看到对边界的判断存在问题,基本思路是左闭右闭,但是while循环的判断是按照左闭右开来写的。对于数组中仅包含一个元素且该元素是目标函数的情况会出错。重新调试后......
  • 树结构转数组/数组转树结构
    树结构转数组constlistTree=[{id:1,name:'部门1',pid:0,children:[{id:2,name:'部门1-1',pid:1,children:[......
  • Java学习之路--array--数组
    packagecom.chao.array;/*数组定义:1.数组市相同类型数据的有序集合2.数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成3.其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们数组声明创建首先必须声明数组变量,才能在程序中使用数组,声明数组变......
  • 每日一题:如何判断是否是数组,一个既简单又复杂的问题。(不要再用Object.prototype.toStr
    1、不要使用Object.prototype.toString.call()正常情况下:constarr=[1,2,3,4,5]constobj={}console.log(Object.prototype.toString.call(arr))//[Object,Array]console.log(Object.prototype.toString.call(obj))//[Object,Object]过去我们能够通过判断Object.proto......