Golangで配列内の最も近い数値を見つける方法


  1. 線形探索: この方法では、配列の各要素と目標の数値の差を計算し、最小の差を持つ要素を見つけます。
package main
import (
    "fmt"
    "math"
)
func findNearestNumberLinear(arr []int, target int) int {
    minDiff := math.MaxInt32
    nearest := 0
    for _, num := range arr {
        diff := int(math.Abs(float64(num - target)))
        if diff < minDiff {
            minDiff = diff
            nearest = num
        }
    }
    return nearest
}
func main() {
    array := []int{1, 4, 7, 10, 13}
    target := 6
    nearest := findNearestNumberLinear(array, target)
    fmt.Println("Nearest number:", nearest)
}
  1. 二分探索: この方法では、配列をソートしておき、二分探索を使用して最も近い数値を見つけます。
package main
import (
    "fmt"
    "sort"
)
func findNearestNumberBinarySearch(arr []int, target int) int {
    sort.Ints(arr)
    index := sort.SearchInts(arr, target)
    if index < len(arr) && arr[index] == target {
        return target
    } else if index == 0 {
        return arr[index]
    } else if index == len(arr) {
        return arr[index-1]
    } else {
        diff1 := arr[index] - target
        diff2 := target - arr[index-1]
        if diff1 < diff2 {
            return arr[index]
        } else {
            return arr[index-1]
        }
    }
}
func main() {
    array := []int{1, 4, 7, 10, 13}
    target := 6
    nearest := findNearestNumberBinarySearch(array, target)
    fmt.Println("Nearest number:", nearest)
}

これらは、Golangで配列内の最も近い数値を見つけるための2つの一般的な方法です。他にも様々なアプローチがありますが、これらの方法は一般的に効果的であり、さまざまなシナリオで利用できます。