# Php Program for Find the subarray with least average

Given an array arr[] of size n and integer k such that k <= n.

**Examples :**

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

## We strongly recommend that you click here and practice it, before moving on to the solution.

A **Simple Solution** is to consider every element as beginning of subarray of size k and compute sum of subarray starting with this element. Time complexity of this solution is O(nk).

An **Efficient Solution** is to solve the above problem in O(n) time and O(1) extra space. The idea is to use sliding window of size k. Keep track of sum of current k elements. To compute sum of current window, remove first element of previous window and add current element (last element of current window).

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.

Below is the implementation of above algorithm.

## PHP

`<?php` `// A Simple PHP program to find ` `// minimum average subarray` ` ` `// Prints beginning and ending` `// indexes of subarray of size ` `// k with minimum average` `function` `findMinAvgSubarray(` `$arr` `, ` `$n` `, ` `$k` `)` `{` ` ` ` ` `// k must be smaller ` ` ` `// than or equal to n` ` ` `if` `(` `$n` `< ` `$k` `)` ` ` `return` `;` ` ` ` ` `// Initialize beginning ` ` ` `// index of result` ` ` `$res_index` `= 0;` ` ` ` ` `// Compute sum of first` ` ` `// subarray of size k` ` ` `$curr_sum` `= 0;` ` ` `for` `(` `$i` `= 0; ` `$i` `< ` `$k` `; ` `$i` `++)` ` ` `$curr_sum` `+= ` `$arr` `[` `$i` `];` ` ` ` ` `// Initialize minimum sum ` ` ` `// as current sum` ` ` `$min_sum` `= ` `$curr_sum` `;` ` ` ` ` `// Traverse from (k+1)'th element` ` ` `// to n'th element` ` ` `for` `( ` `$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);` ` ` `}` ` ` `}` ` ` ` ` `echo` `"Subarray between ["` `,` `$res_index` ` ` `, ` `", "` `,` `$res_index` `+ ` `$k` `- 1, ` `"] has minimum average"` `;` `}` ` ` ` ` `// Driver Code` ` ` `$arr` `= ` `array` `(3, 7, 90, 20, 10, 50, 40);` ` ` ` ` `// Subarray size` ` ` `$k` `= 3; ` ` ` `$n` `= sizeof (` `$arr` `) / sizeof (` `$arr` `[0]);` ` ` `findMinAvgSubarray(` `$arr` `, ` `$n` `, ` `$k` `);` ` ` `return` `0;` ` ` `// This code is contributed by nitin mittal.` `?>` |

**Output: **

Subarray between [3, 5] has minimum average

Time Complexity: O(n)

Auxiliary Space: O(1)

Please refer complete article on Find the subarray with least average for more details!