给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
注意:
1 <= k <= n <= 30,000。
所给数据范围 [-10,000,10,000]。
解法一:
这道题目很早就做出来了,不过是用JS写的,可是JS提交有bug,return 12.75,到了LeetCode就变成13了。怎样改都没有通过。
Go也遇到了这个问题,不过这次不是LeetCode的问题,而是本人刚看了两天go文档,Int转float不知道怎么转 ?
使用 max * 1.0 , k * 1.0 ,没有作用,
使用 strconv.ParseFloat(max,64) ,也没作用 "cannot use max (type int) as type "
最后用了函数 float64(max) / float64 (k) 终于总算是 flaot了
思路
从索引 0 累加到索引 k-1 , 结果 赋值给 max
当 索引 i 大于等于 k 时,每次相加都要减去 索引 i-k 的值 sum = sum + nums [i] - nums[i-k]
当 sum 的结果大于 max 时, max = sum
最后返回平均数 max / k
func findMaxAverage(nums []int, k int) float64 {
sum :=0
max :=0
for i :=0;i<len(nums);i++ {
if i<k {
sum+=nums[i]
if i==k-1{
max=sum
}
}else{
sum += nums[i]
sum -= nums[i-k]
}
if sum > max {
max =sum
}
}
return float64(max) / float64(k)
}
执行用时:216 ms
已经战胜 75.86 % 的 golang 提交记录