From 7ccb2ea522dbaf7bf58e321230b2a5fb2e7664f1 Mon Sep 17 00:00:00 2001 From: xkm Date: Mon, 11 May 2026 19:07:09 +0800 Subject: [PATCH] 1-B-1 --- .gitignore | 2 ++ 1-B-1/go.mod | 3 +++ 1-B-1/main.go | 11 +++++++++++ 1-B-1/main_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 .gitignore create mode 100644 1-B-1/go.mod create mode 100644 1-B-1/main.go create mode 100644 1-B-1/main_test.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..090a1f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +.DS_Store diff --git a/1-B-1/go.mod b/1-B-1/go.mod new file mode 100644 index 0000000..55596da --- /dev/null +++ b/1-B-1/go.mod @@ -0,0 +1,3 @@ +module algo + +go 1.26.2 diff --git a/1-B-1/main.go b/1-B-1/main.go new file mode 100644 index 0000000..6ab85b8 --- /dev/null +++ b/1-B-1/main.go @@ -0,0 +1,11 @@ +package algo + +import "cmp" + +func FindMax[T cmp.Ordered](arr []T) T { + if len(arr) == 1 { + return arr[0] + } + mid := len(arr) / 2 + return max(FindMax[T](arr[:mid]), FindMax[T](arr[mid:])) +} diff --git a/1-B-1/main_test.go b/1-B-1/main_test.go new file mode 100644 index 0000000..76a282f --- /dev/null +++ b/1-B-1/main_test.go @@ -0,0 +1,41 @@ +package algo + +import ( + "fmt" + "math/rand/v2" + "testing" +) + +func TestFindMax(t *testing.T) { + for range 114 { + arr := make([]int64, 114) + for idx := range arr { + arr[idx] = rand.Int64() + } + expectedResult := arr[0] + for _, val := range arr { + expectedResult = max(expectedResult, val) + } + if expectedResult != FindMax(arr) { + t.Failed() + } + } +} + +func BenchmarkFindMax(b *testing.B) { + sizes := []int{10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000} + + for _, n := range sizes { + b.Run(fmt.Sprintf("N=%d", n), func(b *testing.B) { + arr := make([]int64, n) + for idx := range arr { + arr[idx] = rand.Int64() + } + + b.ResetTimer() + for b.Loop() { + FindMax(arr) + } + }) + } +}