### PROBLEM LINK:

**Setter:** Kunal Jain

**Tester:** Kunal Jain, Taranpreet Singh

**Editorialist:** Akash Bhalotia

### DIFFICULTY:

CAKEWALK

### PREREQUISITES:

### PROBLEM:

Given an array of length *N*, find the **maximum average** of the numbers among **all subarrays** of length between *A* and *B*, inclusive.

### CONSTRAINTS:

- 1 \leq T \leq 5
- 1 \leq N \leq 1000
- 0 \leq arr[i] \leq 10^{10}

### QUICK EXPLANATION:

Compute prefix sums of the array. For all subarrays of size in range *A* to *B*, compute the average of the elements efficiently using prefix sums and print the maximum of all these averages.

### EXPLANATION:

- Looking at the constraints, one can

guess that an O(N^2) solution should work. - Remember that a subarray is just like a
*substring*, a*contiguous sequence*of elements in an array. - Let’s consider every subarray of size
*A*to*B*. We can do this by running two nested loops. - We can compute the sum of every such subarray and divide it by its size to get the average, maintaining the max average each time.
- If we do it naively, i.e., calculate the sum of each subarray each time using a separate loop, its complexity increases to O(N^3), which shouldn’t pass in the ideal case.
- What we can do is to maintain a
**prefix sums**array. This way we can get the sum of elements of a subarray in*constant time*, improving the complexity by a factor of*N*, now making it O(N^2), which is sufficient to work here. - Lastly, don’t forget to use a 64-bit data type like
*double*or*long*to store the values.

### COMPLEXITY:

- Time Complexity:
*O(N^2)*per test case. - Space Complexity:
*O(N)*per test case.

### ALTERNATIVE APPROACH:

**Using Sliding Window:**

## Click to view

For a subarray of size *x*, run a sliding window of size x through its elements to get their sum efficiently. Do this for every *x* in range *A* to *B*, each time maintaining the maximum average. This too takes *O(N^2)*.

### AC SOLUTIONS:

### SIMILAR PROBLEMS:

Feel free to share your approach if it differs. If you have any doubts, or if you feel stuck at any point, you can ask them below. We would love to hear your suggestions

Thanks to @taran_1407 and @vijju123 for their constant guidance and support.