稀疏数组

package data.struct;

import org.junit.Test;

/*
 * A.稀疏数组
 * ---------
 * 0 0 0 0 0
 * 0 1 0 8 0
 * 5 0 0 0 9
 * 0 7 0 0 0
 * ---------
 * 创建原始数组有效值稀疏数组
 * 第一行信息为原始数组size(rows) size(cols) val
 * 再记录有效值对应的行、列、值
 * ---------
 *   r c v
 * 0 4 5 5
 * 1 1 1 1
 * 2 1 4 8
 * 3 2 0 5
 * 4 2 4 9
 * 5 3 1 7
 * ---------
 * */

public class SparseArray {
    @Test
    public void sparseArray() {
        //1.创建原始数组,并构建数据
        int originalArray[][] = new int[4][5];
        originalArray[1][1] = 1;
        originalArray[1][4] = 8;
        originalArray[2][0] = 5;
        originalArray[2][4] = 9;
        originalArray[3][1] = 7;
        for(int i=0; i<originalArray.length; i++) {
            for(int j=0; j<originalArray[i].length; j++) {
                System.out.print(originalArray[i][j] + "	");
            }
            System.out.println();
        }
        
        //2.获取有效数字个数
        int count = 0;
        for(int i=0; i<originalArray.length; i++) {
            for(int j=0; j<originalArray[i].length; j++) {
                if(originalArray[i][j] != 0) {
                    count++;
                }
            }
        }
        System.out.printf("有效数字有%d个", count);
        System.out.println();
        
        //3.创建稀疏数组,第一行信息为原始数组size(rows) size(cols) val
        int sparseArray[][] = new int[count+1][3];
        sparseArray[0][0] = originalArray.length;
        sparseArray[0][1] = originalArray[0].length;
        sparseArray[0][2] = count;
        
        //4.遍历原始数组并将有效值,r,c,v添加至稀疏数组
        int sparseArrayRow = 1;
        for(int i=0; i<originalArray.length; i++) {
            for(int j=0; j<originalArray[i].length; j++) {
                if(originalArray[i][j] != 0) {                    
                    sparseArray[sparseArrayRow][0] = i;
                    sparseArray[sparseArrayRow][1] = j;
                    sparseArray[sparseArrayRow][2] = originalArray[i][j];
                    sparseArrayRow ++;
                }
            }
        }
        
        //5.查看稀疏数组结果
        for(int ii=0; ii<sparseArray.length; ii++) {
            for(int jj=0; jj<sparseArray[ii].length; jj++) {
                System.out.print(sparseArray[ii][jj] + "	");
            }
            System.out.println();
        }
        
    }
}
原文地址:https://www.cnblogs.com/biexei/p/11426506.html