Given two arrays, sorted and exactly the same length, write a function that finds a pair of numbers, one from each of the arrays,such that the difference between both is as small as possible.
Input:
[0, 3, 5, 8, 10], [6, 9, 12, 13, 14]
Output:
[5, 6]
Input:
[7.12, 15, 20, 21], [1, 5, 9, 13, 17]
Output:
[12, 13]
Input:
[6, 10, 15, 18, 21], [16, 17, 18, 23, 27]
Output:
[8, 8]
package main
import (
"fmt"
)
func diff(n int) int {
if n < 0 {
return n * -1
}
return n
}
func minDiff(a []int, b []int) (int, int) {
min := -1
var result1, result2 int
for i, j := 0, 0; i < len(a) && j < len(b); {
newMin := diff(a[i] - b[j])
if min == -1 {
min = newMin
result1, result2 = a[i], b[j]
} else {
if newMin < min {
min = newMin
result1, result2 = a[i], b[j]
}
}
if a[i] < b[j] {
i++
} else {
j++
}
}
return result1, result2
}
func main() {
fmt.Println(minDiff([]int{0, 3, 5, 8, 10}, []int{6, 9, 12, 13, 14}))
fmt.Println(minDiff([]int{7, 12, 15, 20, 21}, []int{1, 5, 9, 13, 17}))
fmt.Println(minDiff([]int{6, 10, 15, 18, 21}, []int{16, 17, 18, 23, 27}))
}