Quick actions

cmd+k|ctrl+k

Navigation

Languages

Least Pair

Snippet info

Language

Go

Visibility

public

Author

xealgo

Created

2017-05-31T19:57:14Z

Updated

2017-05-31T20:57:23Z

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])
    }
}
INFO