📜  Javascript 程序来查找具有最小平均数的子数组

📅  最后修改于: 2022-05-13 01:56:07.857000             🧑  作者: Mango

Javascript 程序来查找具有最小平均数的子数组

给定一个大小为 n 的数组 arr[] 和整数 k,使得 k <= n。

例子 :

Input:  arr[] = {3, 7, 90, 20, 10, 50, 40}, k = 3
Output: Subarray between indexes 3 and 5
The subarray {20, 10, 50} has the least average 
among all subarrays of size 3.

Input:  arr[] = {3, 7, 5, 20, -10, 0, 12}, k = 2
Output: Subarray between [4, 5] has minimum average

我们强烈建议您单击此处并进行练习,然后再继续使用解决方案。

一个简单的解决方案是将每个元素视为大小为 k 的子数组的开始,并从该元素开始计算子数组的总和。该解决方案的时间复杂度为 O(nk)。

一个有效的解决方案是在 O(n) 时间和 O(1) 额外空间内解决上述问题。这个想法是使用大小为 k 的滑动窗口。跟踪当前 k 个元素的总和。要计算当前窗口的总和,请删除前一个窗口的第一个元素并添加当前元素(当前窗口的最后一个元素)。

1) Initialize res_index = 0 // Beginning of result index
2) Find sum of first k elements. Let this sum be 'curr_sum'
3) Initialize min_sum = sum
4) Iterate from (k+1)'th to n'th element, do following
   for every element arr[i]
      a) curr_sum = curr_sum + arr[i] - arr[i-k]
      b) If curr_sum < min_sum
           res_index = (i-k+1)
5) Print res_index and res_index+k-1 as beginning and ending
   indexes of resultant subarray.

下面是上述算法的实现。

Javascript


输出:

Subarray between [3, 5] has minimum average

时间复杂度:O(n)
辅助空间:O(1)

有关更多详细信息,请参阅有关查找具有最低平均值的子数组的完整文章!