數據結構與算法入門——稀疏數組

當二維數組有大量0元素時,可進行數組壓縮,形成稀疏數組

在這裏插入圖片描述

  • 二維數組轉稀疏數組的思路:

    • 1.遍歷原始的二維數組,得到有效數據的個數value
    • 2.根據sum就可以創建稀疏數組sparseArray int[value+ 1][3];
    • 3.將二維數組的有效數據數據存入到稀疏數組
  • 稀疏數組轉原始的二維數組的思路:

    • 1.先讀取稀疏數組的第- -行,根據第一行的數據,創建原始的二維數組
    • 2.在讀取稀疏數組後幾行的數據,並賦給原始的二維數組即可.
////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//                  佛祖保佑              永無BUG                  //
////////////////////////////////////////////////////////////////////

package LinearStructure.Array;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author: 東方老贏
 * @Date: 2020/3/28 16:09
 *
 * 稀疏數組
 *
 * 二維數組轉稀疏數組的思路:
 *  1.遍歷原始的二維數組,得到有效數據的個數sum
 *  2.根據sum就可以創建稀疏數組sparseArr int[sum+ 1][3]
 *  3.將二維數組的有效數據數據存入到稀疏數組
 *
 * 稀疏數組轉原始的二維數組的思路:
 *  1.先讀取稀疏數組的第- -行,根據第一行的數據,創建原始的二維數組,比如上面的chessArr2 =int[11][11]
 *  2.在讀取稀疏數組後幾行的數據,並賦給原始的二維數組即可.
 */
public class SparseArray {
    public static void main(String[] args) {
        int[][] nums = new int[][]{{0,0,0,0,1,0,0},{0,2,0,0,0,3,0},{0,0,4,0,0,0,5},{0,6,0,0,0,7,0},{0,0,0,0,0,0,0},{0,0,0,8,0,0,0}};
        int[][] s = sparseArray(nums);
        for (int[] arr:s) {
            System.out.println(Arrays.toString(arr));
        }
        int[][] s2 = TwoArray(s);
        for (int[] arr:s2) {
            System.out.println(Arrays.toString(arr));
        }
    }
    /**
     *  二維數組轉稀疏數組
     */
    public static int[][] sparseArray(int[][] nums){
        //1.遍歷原始的二維數組,得到有效數據的個數sum
        int row = nums.length;
        int col = nums[1].length;
        int value = 0;
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[i].length; j++) {
                if (nums[i][j] != 0)
                    value ++;
            }
        }
        //2.根據sum就可以創建稀疏數組sparseArr int[sum+ 1][3]
        int[][] spArray= new int[value+1][3];
        //3.將二維數組的有效數據數據存入到稀疏數組
        spArray[0][0] = row;
        spArray[0][1] = col;
        spArray[0][2] = value;
        int index = 1;
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[i].length; j++) {
                if (nums[i][j] != 0) {
                    spArray[index][0] = i + 1;
                    spArray[index][1] = j + 1;
                    spArray[index][2] = nums[i][j];
                    index++;
                }
            }
        }

        return spArray;
    }

    /**
     * 稀疏數組轉原始的二維數組
     * @param nums
     * @return
     */
    public static  int[][] TwoArray(int[][] nums){
         //1.先讀取稀疏數組的第- -行,根據第一行的數據,創建原始的二維數組,比如上面的chessArr2 =int[11][11]
            int[][] twoArray = new int[nums[0][0]][nums[0][1]];
        //2.在讀取稀疏數組後幾行的數據,並賦給原始的二維數組即可.
        for (int i = 1; i < nums.length; i++) {
                twoArray[nums[i][0]-1][nums[i][1]-1] = nums[i][2];
        }
        return twoArray;
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章