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)
}
}
二维数组和稀疏数组之间的转换
最新推荐文章于 2024-03-07 18:24:29 发布