- 線形探索: この方法では、配列の各要素と目標の数値の差を計算し、最小の差を持つ要素を見つけます。
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)
}
- 二分探索: この方法では、配列をソートしておき、二分探索を使用して最も近い数値を見つけます。
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つの一般的な方法です。他にも様々なアプローチがありますが、これらの方法は一般的に効果的であり、さまざまなシナリオで利用できます。