C++程序 寻找平均值最小的子数组
给定大小为n的数组arr[]和整数k,其中k <= n。
示例:
输入: arr[] = {3, 7, 90, 20, 10, 50, 40}, k = 3
输出: 索引从3到5之间的子数组
所有大小为3的子数组中,{20, 10, 50}是平均值最小的。
输入: arr[] = {3, 7, 5, 20, -10, 0, 12}, k = 2
输出: 索引在[4, 5]之间的子数组具有最小平均数
一个 简单的解决方案 是将每个元素都作为大小为k的子数组的开头,并计算以该元素开头的子数组的总和。这种解决方案的时间复杂度为O(nk)。
一种 高效的解决方案 是在O(n)时间和O(1)额外空间内解决上述问题。其思路是使用大小为k的滑动窗口。跟踪当前k个元素的总和。为了计算当前窗口的总和,请删除先前窗口的第一个元素并添加当前元素(当前窗口的最后一个元素)。
输出:
时间复杂度:O(n)
辅助空间:O(1)