首页 > 其他分享 >稀疏数组(精选)

稀疏数组(精选)

时间:2023-11-24 22:22:04浏览次数:33  
标签:System xisu int ++ 稀疏 精选 length 数组 ins

2023-11-24

思路:

        将数组转为稀疏数组存入文件/数据库,用的时候再取出来

        稀疏数组3列:行,列,值      第一行记录原数组  行数,列数,以及存入的总值

public class SparseArray_01 {
    public static void main(String[] args) {
        //稀疏数组    基本转换
        System.out.println("==========二维-》稀疏==========");
        int[][] ins=new int[10][10];
        ins[1][2]=1;
        ins[2][4]=2;
        for (int i = 0; i < ins.length; i++) {
            for (int j = 0; j < ins[0].length; j++) {
                System.out.print(ins[i][j]+"\t");
            }
            System.out.println();
        }
        int count=0;//记录有效数据个数
        for (int i = 0; i < ins.length; i++) {
            for (int j = 0; j < ins[0].length; j++) {
                if(ins[i][j]!=0){
                    count++;
                }
            }
        }
        System.out.println("有效数据有:"+count+"个");
        int[][] xisu=new int[count+1][3];//创建稀疏数组
        //稀疏数组都一行赋初值
        xisu[0][0]= ins.length;
        xisu[0][1]= ins[0].length;
        xisu[0][2]= count;
        //再次遍历存入稀疏数组
        int k=1;//记录稀疏数组到哪了 以及最后总长度
        for (int i = 0; i < ins.length; i++) {
            for (int j = 0; j < ins[0].length; j++) {
                if(ins[i][j]!=0){
                    xisu[k][0]= i;
                    xisu[k][1]= j;
                    xisu[k][2]= ins[i][j];
                    k++;
                }
            }
        }
        if(k!=count+1){
            System.out.println("error");
        }
        //遍历稀疏数组
        for (int i = 0; i < xisu[0].length; i++) {
            for (int j = 0; j <3; j++) {
                System.out.print(xisu[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println("==========稀疏-》二维==========");
        int[][] newIns=new int[ xisu[0][0] ][ xisu[0][1] ];
 
        for (int i = 1; i < xisu.length; i++) {     //这里注意是从1开始的
            newIns[ xisu[i][0] ][ xisu[i][1] ]= xisu[i][2];
        }
 
        for (int i = 0; i < newIns.length; i++) {
            for (int j = 0; j < newIns[0].length; j++) {
                System.out.print(newIns[i][j]+"\t");
            }
            System.out.println();
        }
 
 
 
 
    }
}
 
public class SparseArray_02 {
    public static void main(String[] args)  throws Exception {
        //将稀疏数组写入文件,并读出
        int[][] xisu=new int[3][3];
        xisu[0][0]=10;
        xisu[0][1]=10;
        xisu[0][2]=2;
 
        xisu[1][0]=1;
        xisu[1][1]=2;
        xisu[1][2]=1;
 
        xisu[2][0]=2;
        xisu[2][1]=4;
        xisu[2][2]=2;
 
        for (int i = 0; i < xisu.length; i++) {
            for (int j = 0; j < xisu[0].length; j++) {
                System.out.print(xisu[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println("=========写入=========");
        FileWriter fw=new FileWriter("src\\XiSuShuZu\\sparse.txt");
        for (int i = 0; i < xisu.length; i++) {
            for (int j = 0; j < xisu[0].length; j++) {
               fw.write(xisu[i][j]+"\t");//单独加数字有问题
            }
            fw.write("\n");
        }
        fw.close();
        System.out.println("=========读取=========");
        FileReader fr=new FileReader("src//XiSuShuZu//sparse.txt");
        //扩展一点:读取不知道行,列数,怎么读?
        //读取一个文件/数据库一定是知道大致结构的,不然没有一点意义 ,所以不要用列表
        //像现在这个情况就是知道是 3列,不知道具体多少行
        //但是Java动态二维数组只能是行确定,所以行列的意义要换一下
            // 不行,试过了,动态添加,数组怎么都不行
        //必须先读取一遍,看有多少行,而且因为这个流没有刷新方法,只能看一下x未多少
        BufferedReader brd=new BufferedReader(fr);
        /*
        int x=0;
        while((brd.readLine())!=null){
            x++;
        }
        System.out.println(x);//x是3
        */
        int[][] newXiSu=new int[3][3];//x=3
        String str;
        int y=0;
        while((str=brd.readLine())!=null){
            String[] strings = str.split("\t");
            newXiSu[y][0]=Integer.parseInt(strings[0]);
            newXiSu[y][1]=Integer.parseInt(strings[1]);
            newXiSu[y][2]=Integer.parseInt(strings[2]);
            y++;
        }
 
        for (int i = 0; i < newXiSu.length; i++) {
            for (int j = 0; j < newXiSu[0].length; j++) {
                System.out.print(newXiSu[i][j]+"\t");
            }
            System.out.println();
        }
        brd.close();
        fr.close();
 
    }
}

 

标签:System,xisu,int,++,稀疏,精选,length,数组,ins
From: https://www.cnblogs.com/youye9527/p/17854925.html

相关文章

  • JavaScript数组中的常用函数解析
    1.splice方法当使用splice()方法时,可以传递不同的参数来实现不同的操作。以下是splice()方法的参数说明:array.splice(start,deleteCount,item1,item2,...);start:必需,指定要进行操作的起始索引位置。如果该值为负数,则表示从数组末尾开始计算的偏移量。例如,-1表示倒数第......
  • 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整
    示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]用数组的indexOf()方法来查找值vartowSum=function(nums,target){for(leti=0,len=nums.length;i<len;i++){if(nums.indexOf(target-nums[i])>-1......
  • BigDecimal加减乘(cheng)除BigDecimal[]数组比较大小
     文章目录前言一、Bigdecimal是什么?二、使用步骤总结 前言提示:BigDecimal在使用的过程中尽量采用String类型的参数进行转换尽量避免不使用字符串的数字对小数点进行数据格式的转换,避免出现精准问题。加法:add()函数减法:subtract()函数乘法:multiply()函数除法:divide()函数绝对值......
  • 53. 最大子数组和(中)
    目录题目动态规划优化题目给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大,为6。示例2:输入......
  • 集合框架详解 [精选]
    Hii,mJinXiang⭐前言⭐本篇文章主要介绍集合框架的两个接口超级详细介绍,集合框架的使用以及部分理论知识......
  • 数组(1)数组定义及典例
    <1>数组定义(1)引入数组概念:————用于记录很多同类型的数字格式:类型变量名称[元素数量];——举例:intgrades[100];元素数量必须是整数;数组功能及特点:功能:1.相当于存放数据的容器;特点:1.一旦创建不可改变大小;2.其中所有元素具有相同的数据类型;3.数组中的元......
  • shell脚本——函数与数组
    函数函数和别名很像有些脚本会被反复使用alias脚本比较复杂函数脚本的别名使用函数可以避免代码重复,增加可读性,简化脚本定义函数名(){脚本}function函数名(){脚本}先定义在调用#!/bin/bashos(){ifgrep-iqcentos/etc/os-releasethenecho"该系统是cento......
  • 代码随想录-数组
    704.二分查找https://leetcode.cn/problems/binary-search/description/classSolution{public:intsearch(vector<int>&nums,inttarget){intleft=0;intright=nums.size()-1;while(left<=right){......
  • js 对象数组排序
    //排序,根据name名称中的数字排序sortList(a:any,b:any){if(a?.name&&b?.name){constaStr=a.name.replace(/[^\d]/g,'')constbStr=b.name.replace(/[^\d]/g,'')......
  • js 数组、字符串常用方法
    JavaScript数组的常用操作增:push()向数组的末尾添加一个或更多元素,并返回新的长度unshift()在数组开头添加任意多个值,然后返回新的数组长度splice()传入三个参数,分别是开始位置、0(要删除的元素数量)、插入的元素,返回空数组concat()首先会创建一个当前数组的副本,然后再把它......