稀疏数组
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] + "\t"); } 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] + "\t"); } System.out.println(); } } }