Вы не можете использовать один цикл только для наименьшего среднего, но сложность, которую вы можете поддерживать до O (n).
static void FindFirstSub(int arr[],int n, int k)
{
if (n < k)
return;
int res_index = 0;
int curr_sum = 0;
for (int i = 0; i < k; i++)
curr_sum += arr[i];
// Initialize minimum sum as current sum
int min_sum = curr_sum;
for (int i = k; i < n; i++)
{
// Add current item and remove first
// item of previous subarray
curr_sum += arr[i] - arr[i - k];
// Update result if needed
if (curr_sum < min_sum) {
min_sum = curr_sum;
res_index = (i - k + 1);
}
}
System.out.println("Subarray btw [" +
res_index + ", " + (res_index + k - 1) +
"] has minimum average");
}
// Driver method to test the above function
public static void main(String[] args)
{
int arr[] = { 3, 7, 90, 20, 10, 50, 40 };
int k = 3; // Subarray size
FindFirstSub(arr.length, k);
}