java面试基础算法之稀疏数组

  因最近准备跳槽,所以自己开始准备面试相关的内容。算是自己的准备面试的随记吧!

 一、稀疏数组介绍

   当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

  稀疏数组的处理方法是:

    1) 记录数组 一共有几行几列,有多少个不同的值
    2) 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而 缩小程序的规模

    java面试基础算法之稀疏数组

 

    稀疏数组的特点:

    1)第一行存的是原二维数组的行数列数以及有效数据的个数;

    2)  剩下的行分别存储原二维数组中有效数据的行下标以及列下标以及数值;

二、稀疏数组的代码实现

  二维数组转稀疏数组的思路:

  1.遍历原始数组,得到有效数据的个数 可以定义为 sum;

  2.根据有效数据的个数sum 创建稀疏数组,稀疏数组也是一个二维数组,行数:sum +1  列数:固定为3;

  3.将二维数组的有效数据存入稀疏数组;

  具体代码实现如下:

java面试基础算法之稀疏数组
 1 public static void main(String[] args) {
 2         //创建原二维数组
 3         int oldArr[][] = new int[5][5];
 4         oldArr[0][1] = 10;
 5         oldArr[2][3] = 42;
 6         oldArr[1][2] = 14;
 7         //遍历打印原二维数据
 8         int [] arrTemp;//定义副本数组
 9         int sum = 0;//定义有效数据个数
10         for (int i = 0; i < oldArr.length ; i++) {
11             arrTemp = oldArr[i];
12             for (int j = 0; j < arrTemp.length ; j++) {
13                 System.out.printf("%d\t", arrTemp[j]);
14                 if(arrTemp[j] != 0){
15                     sum++;
16                 }
17             }
18             System.out.println();
19         }
20         
21         //创建稀疏数组
22         int resArr[][] = new int[sum + 1][3];
23         //稀疏数组第一列默认存原二维数组的行数列数以及有效数据个数
24         resArr[0][0] = 5;
25         resArr[0][1] = 5;
26         resArr[0][2] = sum;
27         int count = 1;
28         //遍历原数组给稀疏数组赋值
29         for (int i = 0; i< oldArr.length ; i++) {
30             arrTemp = oldArr[i];
31             for (int j = 0; j < arrTemp.length ; j++) {
32                 if(arrTemp[j] != 0){
33                     resArr[count][0] = i;
34                     resArr[count][1] = j;
35                     resArr[count][2] = arrTemp[j];
36                     count++;
37                 }
38             }
39         }
40         //循环打印稀疏数组
41         System.out.println("得到稀疏数组为~~~~");
42         for (int i = 0; i< resArr.length ;i++) {
43             arrTemp = resArr[i];
44             System.out.printf("%d\t%d\t%d\t\n",arrTemp[0], arrTemp[1], arrTemp[2]);
45         }
46     }
View Code

 

上一篇:OpenWrt搭建KMS服务(Vlmcsd)


下一篇:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。