1-B-1
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
.idea
|
||||
.DS_Store
|
||||
@@ -0,0 +1,3 @@
|
||||
module algo
|
||||
|
||||
go 1.26.2
|
||||
@@ -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:]))
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user