package main
import (
"fmt"
"math"
)
func FindLeaseDiff(a []int, b[]int) []int {
i, j, m := 0, 0, 0
la, lb := len(a), len(b)
var r []int
for {
av := a[i]
bv := b[j]
if av == bv {
return []int{av, bv, 0}
}
// get the distance
d := int(math.Abs(float64(av-bv)));
// since we're just starting, set m to the first diff
if i == 0 && j == 0 {
m = d
r = []int{av, bv, m}
}
if m > d {
m = d
r = []int{av, bv, m}
}
// if a[i] < b[j], increment the smaller a.
if av < bv {
i++
} else if av > bv {
j++
}
if i >= la || j >= lb {
break
}
}
return r
}
func main() {
{
a := []int{1, 2, 3, 4}
b := []int{4}
r := FindLeaseDiff(a, b)
fmt.Printf("Diff: %d, %d = %d\n", r[0], r[1], r[2])
}
{
a := []int{1, 7, 9}
b := []int{4, 5, 11}
r := FindLeaseDiff(a, b)
fmt.Printf("Diff: %d, %d = %d\n", r[0], r[1], r[2])
}
{
a := []int{3, 4, 7}
b := []int{4, 6, 10}
r := FindLeaseDiff(a, b)
fmt.Printf("Diff: %d, %d = %d\n", r[0], r[1], r[2])
}
{
a := []int{30, 40, 71, 86}
b := []int{25, 88}
r := FindLeaseDiff(a, b)
fmt.Printf("Diff: %d, %d = %d\n", r[0], r[1], r[2])
}
{
a := []int{-10, 50, 171}
b := []int{15, 86, 93}
r := FindLeaseDiff(a, b)
fmt.Printf("Diff: %d, %d = %d\n", r[0], r[1], r[2])
}
}