方法一:

思路:枚举第1个连续k个元素的和,然后后面都是减去去掉的元素,加上新加入的元素,并使用一个变量进行动态更新,最后返回我们的结果

  1. //注意:数组的最开始k个元素最大的时候这种情况一定要考虑进去
  2. func findMaxAverage(nums []int, k int) float64 {
  3. //最后的结果
  4. sum := 0
  5. ret := math.MinInt32 //不可以写0,因为可能是负数,
  6. for i := 0; i < len(nums) - k + 1; i++ {
  7. if i == 0 {
  8. //计算前k个数字的和
  9. for i := 0; i < k; i++ {
  10. sum += nums[i]
  11. }
  12. } else {
  13. //当前的范围是[i,i+k-1]
  14. //需要在之前的基础上左边减去nums[i-1],右边加上nums[i+k-1],然后动态更新最大值
  15. sum = sum - nums[i-1] + nums[i+k-1]
  16. }
  17. //动态更新最大值
  18. if ret < sum {
  19. ret = sum
  20. }
  21. }
  22. return float64(ret) / float64(k)
  23. }
  1. func findMaxAverage(nums []int, k int) float64 {
  2. //保存连续k个的和
  3. sum := 0
  4. //最后的结果
  5. ret := 0
  6. for i := 0; i < k; i++ {
  7. sum += nums[i]
  8. }
  9. ret = sum
  10. for i := 1; i < len(nums) - k + 1; i++ {
  11. //当前的范围是[i,i+k-1]
  12. //需要在之前的基础上左边减去nums[i-1],右边加上nums[i+k-1],然后动态更新最大值
  13. sum = sum - nums[i-1] + nums[i+k-1]
  14. //动态更新最大值
  15. if ret < sum {
  16. ret = sum
  17. }
  18. }
  19. return float64(ret) / float64(k)
  20. }