-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathminimum_average_difference.go
49 lines (46 loc) · 1.2 KB
/
minimum_average_difference.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main
import "math"
func ToFloat64(in int) float64 {
return float64(in)
}
func minimumAverageDifference(nums []int) int {
// if there is only one element then itself would be the ans (index 0).
if len(nums) == 1 {
return 0
}
// finding total sum of vector (using int int to prevent overflow)
var sum int = 0
for _, a := range nums {
sum += a
}
//initially left side sum will be zero and right side sum will be total sum
var leftSum int = 0
var rightSum int = sum
// this will be used to keep track of minimum
var avgDiff float64
var mini int = -1
var minIndex int = -1
var n = len(nums)
for i := 0; i < n-1; i++ {
// increasing left sum and decreasing right sum
leftSum += nums[i]
rightSum -= nums[i]
// finding avgDiff , (here (n-i-1) represents element count in right part, ans (i+1) in left part)
avgDiff = math.Abs(ToFloat64((leftSum / (i + 1)) - (rightSum / (n - i - 1))))
//updating mini
if mini == -1 {
mini = int(avgDiff)
minIndex = i
} else if mini > int(avgDiff) {
mini = int(avgDiff)
minIndex = i
}
}
// check for last element
avgDiff = math.Round(ToFloat64(sum / n))
if mini > int(avgDiff) {
mini = int(avgDiff)
minIndex = n - 1
}
return minIndex
}