• 子数组的最大平均数-滑动窗口算法-基于Go


    给定一个整数数组,找出平均数最大且长度为K的下标连续的子数组,
    并输出该平均数。

    如[1,12,-5,-6,50,3], k=4
    返回 12.75

    • 滑动窗口
    func findMaxAverage(nums []int, k int)float64{
    	var sum = 0
    	var n = len(nums)
    	
    	// 使用第一个窗口的值来初始化sum
    	for i:=0;i<k;i++{
    		sum += nums[i]
    	}
    
    	var max = sum
    	// 开始向右滑动,i为右边界
    	for i:=k;i<n;i++{
    		// i-k为左边界
    		sum = sum - nums[i-k] + nums[i]
    		max = int(math.Max(float64(sum), float64(max)))
    	}
    
    	return float64(max)/float64(k)
    }
    
    • 使用双指针版滑动窗口
    func findMaxAverage2(nums []int, k int)float64{
    	var low = 0//左边界减去的旧窗口
    	var high = k//右边界的新增窗口
    	var n = len(nums)
    	var sum = 0
    
    	// 使用第一个窗口来初始化sum的值
    	for i:=0;i<k;i++{
    		sum += nums[i]
    	}
    
    	var max = sum
    	for high<n{
    		sum = sum + nums[high] - nums[low]
    		max = int(math.Max(float64(sum), float64(max)))
    		high++
    		low++
    	}
    
    	return float64(max)/float64(k)
    }
    
  • 相关阅读:
    JavaScript DOM 编程艺术(第2版)读书笔记(3)
    JavaScript DOM 编程艺术(第2版)读书笔记(1)
    css杂记
    2020年11月15日
    2020年11月14日
    2020年11月13日
    2020年11月12日
    《代码大全》阅读笔记04
    2020年11月11日
    2020年11月10日
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14631053.html
Copyright © 2020-2023  润新知