二维数组和稀疏数组之间的转换

object SparseArray {


  def getSparseArray(arr: Array[Array[Int]]): Array[Array[Int]] = {
    //将二维数组转换成稀疏数组
    //1.遍历二维数组得到非零的数的和
    var sum = 0
    for (elem <- arr) {
      for (e <- elem) {
        if(e != 0) sum+=1
      }
    }
    //2.创建对应的稀疏数组 行数是sum+1 列数为3
    val sparseArray = Array.ofDim[Int](sum + 1, 3)
    //3.给稀疏数组赋值
    sparseArray(0)=Array(arr.length,arr(0).length,sum)
    //遍历二维数组将非零值赋值
    var count = 1
    for (i <- arr.indices) {
      for (j <- arr(0).indices){
        if(arr(i)(j) != 0){
          sparseArray(count) = Array(i,j,arr(i)(j))
          count += 1
        }
      }
    }
    sparseArray
  }

  def backFromSparse(sparseArr: Array[Array[Int]]): Array[Array[Int]]= {
    val row = sparseArr(0)(0)
    val col = sparseArr(0)(1)
    val arr = Array.ofDim[Int](row, col)
    for (i <- 1 until  sparseArr.length){
      arr(sparseArr(i)(0))(sparseArr(i)(1))=sparseArr(i)(2)
    }
    arr
  }

  def printArr(arr: Array[Array[Int]],seq: String = " ") = {
    for (elem <- arr) {
      for (e <- elem) {
        print(e+seq)
      }
      println()
    }
  }

  def main(args: Array[String]): Unit = {
    //创建11*11二维数组
    val arr = Array.ofDim[Int](11, 11)
    arr(1)(2)=4
    arr(2)(3)=2
    //原始二维数组
    println("原数组如下")
    printArr(arr)
    val sparseArr = getSparseArray(arr)
    println("稀疏数组如下")
    printArr(sparseArr,"\t")
    val arr2 = backFromSparse(sparseArr)
    println("稀疏数组转换后:")
    printArr(arr2)

  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值