def maxProductPair(nums: Seq[Int]): (Int, Int) = {
require(nums.length >= 2, "Need at least two numbers")
var (max1, max2) = (Int.MinValue, Int.MinValue)
var (min1, min2) = (Int.MaxValue, Int.MaxValue)
nums.foreach { n =>
// Track two largest
if (n > max1) {
max2 = max1
max1 = n
} else if (n > max2) {
max2 = n
}
// Track two smallest
if (n < min1) {
min2 = min1
min1 = n
} else if (n < min2) {
min2 = n
}
}
if (max1 * max2 >= min1 * min2) (max1, max2)
else (min1, min2)
}
val nums = Seq(3, 9, 1, 3, 7, 0, 8, 4)
val (a, b) = maxProductPair(nums)
println(s"Pair: ($a, $b), product = ${a * b}")
/*
run:
Pair: (9, 8), product = 72
*/