package twosum
import scala.collection.mutable.ListBuffer
import scala.collection.mutable.Map
object Solution {
/**
* i的平方时间复杂度
*/
def twoSum(nums: Array[Int], target: Int): Array[Int] = {
val len = nums.length
val res = Array[Int](-1, -1)
var m = 0
for {
i <- 0 to len - 1
j <- i+1 to len - 1
if (nums(i) + nums(j) == target && m ==0)
} {
m += 1
res(0) = i
res(1) = j
}
res
}
/**
* 查字典,key为数组value值,value为索引值
* 时间复杂度为n
*/
def twoSum1(nums: Array[Int], target: Int): Array[Int] = {
val res = Array[Int](-1, -1)
var map = Map[Int, ListBuffer[Int]]()
val len = nums.length
for {
i <- 0 to len -1
} {
if(!map.contains(nums(i))) map(nums(i)) = ListBuffer[Int](i) else map(nums(i)).append(i)
}
for {
j <- 0 to len - 1
} {
val key = target - nums(j)
if(map.contains(key)) {
for{ele <- map(key)} {
if(ele != j) {
res(0) = ele
res(1) = j
}
}
}
}
res
}
def main(args: Array[String]): Unit = {
val res = twoSum1(Array[Int](1, 2, 3, 4, 5, 6, 7, 8, 9), 5)
println(res(0))
println(res(1))
}
}
网友评论