首页 > 编程语言 >秦疆的Java课程笔记:59 数组 稀疏数组

秦疆的Java课程笔记:59 数组 稀疏数组

时间:2023-12-05 15:57:54浏览次数:39  
标签:11 59 数组 int System 稀疏 秦疆 out

  • 当一个数组中大部分元素都是0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
  • 稀疏数组的处理方式是:
    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
public class ArrayDemo1 {  
    public static void main(String[] args) {  
        //创建一个11*11的棋盘。0:没有棋子;1:黑棋;2,白棋;  
        int[][] a = new int[11][11];  
        a[1][2]=1;  
        a[2][3]=2;  
        //输出原始数组  
        System.out.println("输出原始数组:");  
        for (int[] ints:a) {  
            for (int anint : ints) {  
                System.out.print(anint + "\t");  
            }  
            System.out.println();  
        }  
        //转换为稀疏数组  
        //获取有效值个数  
        int sum = 0;  
        for (int i = 0; i < 11; i++) {  
            for (int j = 0; j < 11; j++) {  
                if (a[i][j] != 0) {  
                    sum ++;  
                }  
            }  
        }  
        System.out.println("有效值个数:" + sum);  
        //创建一个稀疏数组  
        int[][] b = new int[sum+1][3];  
        b[0][0] = 11;  
        b[0][1] = 11;  
        b[0][2] = sum;  
        //遍历二维数组,将非零的值,存放到稀疏数组中  
        int count = 0;  
        for (int i = 0; i < a.length; i++) {  
            for (int j = 0; j < a[i].length; j++) {  
                if (a[i][j] != 0) {  
                    count ++;  
                    b[count][0] = i;  
                    b[count][1] = j;  
                    b[count][2] = a[i][j];  
                }  
            }  
        }  
        //输出稀疏数组  
        System.out.println("输出稀疏数组:");  
        for (int i = 0; i < b.length; i++) {  
            System.out.println(b[i][0] + "\t"  
                    + b[i][1] + "\t"  
                    + b[i][2] + "\t");  
        }  
        //稀疏数组还原  
        System.out.println("还原:");  
        //读取稀疏数组  
        int[][] c = new int[b[0][0]][b[0][1]];  
        //给其中的元素还原值  
        for (int i = 1; i < b.length; i++) {  
            c[b[i][0]][b[i][1]] = b[i][2];  
        }  
        //打印还原数组:  
        System.out.println("输出还原数组:");  
        for (int[] ints:c) {  
            for (int anint : ints) {  
                System.out.print(anint + "\t");  
            }  
            System.out.println();  
        }  
    }  
}
====效果如下====
输出原始数组:
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
有效值个数:2
输出稀疏数组:
11	11	2	
1	2	1	
2	3	2	
还原:
输出还原数组:
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	

标签:11,59,数组,int,System,稀疏,秦疆,out
From: https://www.cnblogs.com/Acolyte/p/17877437.html

相关文章

  • 刷题复习(二)数组-双指针
    刷题复习(二)数组-双指针https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/shuang-zhi-fa4bd/1、删除有序数组中的重复项慢指针用于统计不重复项,快指针用于不停前进对比是否有新的不重复项,有的话进行替换classSolution{publicintremoveDuplicates(int[]nums){......
  • 秦疆的Java课程笔记:56 数组 二维数组
    多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。秦疆老师表示Java中并不太使用二维以上的多维数组。例如二维数组:inta[][]=newint[2][5],就可以看成是一个两行五列的数组publicclassArrayDemo1{publicstaticv......
  • Educational Codeforces Round 159 总结
    最失败的一集。C开题顺序搞错,不小心先开了C,以为是A。还好C不难。题意大概是在给定的数组最后添一个数(所有数两两不同),再自定义一个数\(k\),数组中每个数可以加上若干个\(k\),最后使得所有数字相等。要求加\(k\)的次数最少。如果不加最后一个数,那么显然把所有的数加到与最大......
  • [CF1902] Educational Codeforces Round 159 A~E 题解
    [CF1902]EducationalCodeforcesRound159A~E题解A.BinaryImbalance很快观察到如果有不同的相邻元素,那么一定有解,意味着如果全是1无解,其他有解B.GettingPoints题面很长,可以发现,最好的偷懒方式一定是把所有的课都拖到最后几天上(真实),可以简单调整证明这样是不劣的,最后......
  • [Educational Codeforces Round 159 (Rated for Div. 2)](https://codeforces.com/con
    EducationalCodeforcesRound159(RatedforDiv.2)好困,差点没打A-BinaryImbalance#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve(){ strings; intn; cin>>n; cin>>s; if(n==......
  • Day10 数组
    1.数组声明//方法一:首选dataType[]arrayName;//方法二:非首选,像c++dataTypearrayName[];2.数组创建2.1动态初始化//不初始化,大小自行决定dataType[]array=newdataType[arraySize];如果动态初始化会赋予该类型元素的默认值:0,0.0,false可以指定数组长度,其中数组......
  • Educational Codeforces Round 159 (Rated for Div. 2)
    EducationalCodeforcesRound159(RatedforDiv.2)基本情况A题秒了。B题想出来贪心思想,也想出来怎么找最优解了,但实现极其复杂繁琐,最后以先超时优化后又错误的结果告终。B.GettingPoints明显越后面开始学收益越高。然后写了个简单粗暴的纯模拟,T了。#include<iostrea......
  • 除自身以外数组的乘积
    题解模板难度:简单|中等√|困难-------------------用时:28分钟(第一次)-------------------作题日期:2023-12-04ps:本人理解有限,以下是自我理解,官方和大佬有更完整和详细的解析!!!题目描述题目描述给你一个整数数组nums,返回数组answer,其中answer[i]......
  • 代码随想录算法训练营第五天| 242.有效的字母异位词 349. 两个数组的交集 1. 两数之
    LeetCode242.有效的字母异位词题目链接: LeetCode242思路: 使用C++自带的库函数,经过排序后进行比较(使用库函数) classSolution{public:boolisAnagram(strings,stringt){if(s.length()!=t.length())returnfalse;sort(s.begin(),......
  • 秦疆的Java课程笔记:51-52 数组 什么是数组&数组的声明和创建
    51什么是数组数组是入门阶段的最后部分。数组的定义:数组是相同类型数据的有序集合。数组描述的是相同类型的若干数据,按照一定的先后次序排序组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。52数组的声明和创建首先必须声明数......