zoukankan      html  css  js  c++  java
  • 子数组的最大平均数-滑动窗口算法-基于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)
    }
    
  • 相关阅读:
    关于sqrt函数的使用
    电子商务
    随笔
    哈哈
    整体管理
    软件产品质量特性
    问题
    风险
    antd
    Flex布局大作用
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14631053.html
Copyright © 2011-2022 走看看