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