From 83202647efb7f9e1844bd89d24fbeebd2ca78b4a Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Fri, 16 Aug 2024 11:19:25 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB624.=20Maximum=20Distance=20i?= =?UTF-8?q?n=20Arrays=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- go/maximum-distance-in-arrays.go | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 go/maximum-distance-in-arrays.go diff --git a/go/maximum-distance-in-arrays.go b/go/maximum-distance-in-arrays.go new file mode 100644 index 0000000..36e646c --- /dev/null +++ b/go/maximum-distance-in-arrays.go @@ -0,0 +1,40 @@ +package main + +type Range struct { + min, max int +} + +func RangeFromArray(array []int) Range { + return Range{ + min: array[0], + max: array[len(array)-1], + } +} + +func (r *Range) Update(subarray []int) { + r.min = min(r.min, subarray[0]) + r.max = max(r.max, subarray[len(subarray)-1]) +} + +func abs(x int) int { + return max(-x, x) +} + +func RangeMaxDistance(x, y Range) int { + return max( + abs(x.min-y.max), + abs(y.min-x.max), + ) +} + +func maxDistance(arrays [][]int) int { + foundDistance := 0 + + extremes := RangeFromArray(arrays[0]) + for i := 1; i < len(arrays); i++ { + foundDistance = max(foundDistance, RangeMaxDistance(extremes, RangeFromArray(arrays[i]))) + extremes.Update(arrays[i]) + } + + return foundDistance +}