Skip to content

Commit 7e82f34

Browse files
committed
completed 2090 - k radius subarray averages in go
1 parent 8cc6259 commit 7e82f34

File tree

4 files changed

+117
-0
lines changed

4 files changed

+117
-0
lines changed

go/kRadiusSubarrayAverges/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# 2090. K Radius Subarray Averages

go/kRadiusSubarrayAverges/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module kRadiusSubarrayAverages
2+
3+
go 1.23.1

go/kRadiusSubarrayAverges/solution.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package solution
2+
3+
func getAverages(nums []int, k int) []int {
4+
//if k == 0 {
5+
// return nums
6+
//}
7+
//
8+
//windowSize := 2*k + 1
9+
//n := len(nums)
10+
//averages := make([]int, n)
11+
//
12+
//for i := range averages {
13+
// averages[i] = -1
14+
//}
15+
//
16+
//if windowSize > n {
17+
// return averages
18+
//}
19+
//
20+
//var windowSum int64 = 0
21+
//
22+
//for i := 0; i < windowSize; i++ {
23+
// windowSum += int64(nums[i])
24+
//}
25+
//
26+
//averages[k] = int(windowSum / int64(windowSize))
27+
//
28+
//for i := windowSize; i < n; i++ {
29+
// windowSum = windowSum - int64(nums[i-windowSize]) + int64(nums[i])
30+
// averages[i-k] = int(windowSum / int64(windowSize))
31+
//}
32+
//
33+
//return averages
34+
35+
if k == 0 {
36+
return nums
37+
}
38+
res := make([]int, len(nums))
39+
40+
left, right, sum, division := 0, 0, 0, 2*k+1
41+
42+
for ; right < len(nums); right++ {
43+
sum += nums[right]
44+
45+
if (right - left + 1) < division {
46+
res[right] = -1
47+
} else {
48+
// shrink window
49+
res[(left+right)/2] = sum / division
50+
res[right] = -1
51+
sum -= nums[left]
52+
left++
53+
}
54+
}
55+
56+
return res
57+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package solution
2+
3+
import (
4+
"slices"
5+
"testing"
6+
)
7+
8+
func TestGetAverages(t *testing.T) {
9+
testCases := []struct {
10+
name string
11+
nums []int
12+
k int
13+
want []int
14+
}{
15+
{
16+
name: "test case one",
17+
nums: []int{1, 3, 2, 6, 2},
18+
k: 1,
19+
want: []int{-1, 2, 3, 3, -1},
20+
},
21+
{
22+
name: "test case two",
23+
nums: []int{7, 4, 3, 9, 1, 8, 5, 2, 6},
24+
k: 3,
25+
want: []int{-1, -1, -1, 5, 4, 4, -1, -1, -1},
26+
},
27+
{
28+
name: "test case three",
29+
nums: []int{5, 2, 8, 1, 9},
30+
k: 0,
31+
want: []int{5, 2, 8, 1, 9},
32+
},
33+
{
34+
name: "test case four",
35+
nums: []int{1, 2, 3, 4, 5},
36+
k: 3,
37+
want: []int{-1, -1, -1, -1, -1},
38+
},
39+
{
40+
name: "test case five",
41+
nums: []int{100000, 200000, 300000, 400000, 500000},
42+
k: 1,
43+
want: []int{-1, 200000, 300000, 400000, -1},
44+
},
45+
}
46+
47+
for _, tc := range testCases {
48+
t.Run(tc.name, func(t *testing.T) {
49+
got := getAverages(tc.nums, tc.k)
50+
51+
if !slices.Equal(got, tc.want) {
52+
t.Errorf("got %v, want %v", got, tc.want)
53+
}
54+
})
55+
}
56+
}

0 commit comments

Comments
 (0)