Skip to content

Commit 990e26f

Browse files
Added full code of maximum average of subarray
1 parent f063ce1 commit 990e26f

File tree

1 file changed

+109
-0
lines changed
  • Code Practice/Maximum average subarray

1 file changed

+109
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
## Maximum average subarray
2+
Given an array Arr of size N and a positive integer K, find the sub-array of length K with the maximum average. [🔗Goto](https://practice.geeksforgeeks.org/problems/maximum-average-subarray5859/1#)
3+
4+
```
5+
Example 1:
6+
7+
Input:
8+
K = 4, N = 6
9+
Arr[] = {1, 12, -5, -6, 50, 3}
10+
Output: 12 -5 -6 50
11+
Explanation: Maximum average is
12+
(12 - 5 - 6 + 50)/4 = 51/4.
13+
14+
Example 2:
15+
16+
Input:
17+
K = 3, N = 7
18+
Arr[] = {3, -435, 335, 10, -50, 100, 20}
19+
Output: 335 10 -50
20+
Explanation: Maximum average is
21+
(335 + 10 - 50)/3 = 295/3.
22+
```
23+
<details>
24+
<summary>Full Code</summary>
25+
26+
```java
27+
import java.io.*;
28+
import java.util.*;
29+
30+
public class GFG {
31+
public static void main(String[] args) throws Exception {
32+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
33+
int tc = Integer.parseInt(br.readLine().trim());
34+
while (tc-- > 0) {
35+
String[] inputLine;
36+
inputLine = br.readLine().trim().split(" ");
37+
int k = Integer.parseInt(inputLine[0]);
38+
inputLine = br.readLine().trim().split(" ");
39+
int n = Integer.parseInt(inputLine[0]);
40+
int[] arr = new int[n];
41+
inputLine = br.readLine().trim().split(" ");
42+
for (int i = 0; i < n; i++) {
43+
arr[i] = Integer.parseInt(inputLine[i]);
44+
}
45+
46+
int ans = new Solution().findMaxAverage(arr, n, k);
47+
for(int i=ans; i<ans+k; i++)
48+
System.out.print(arr[i]+" ");
49+
System.out.println();
50+
}
51+
}
52+
}
53+
// } Driver Code Ends
54+
55+
56+
//User function Template for Java
57+
58+
class Solution {
59+
int findMaxAverage(int[] arr, int n, int k) {
60+
if (k > n) return -1;
61+
62+
// Compute sum of first 'k' elements
63+
int sum = arr[0];
64+
for (int i = 1; i < k; i++)
65+
sum += arr[i];
66+
67+
int max_sum = sum, max_end = k - 1;
68+
69+
// Compute sum of remaining subarrays
70+
for (int i = k; i < n; i++) {
71+
sum = sum + arr[i] - arr[i - k];
72+
if (sum > max_sum) {
73+
max_sum = sum;
74+
max_end = i;
75+
}
76+
}
77+
// Return starting index
78+
return max_end - k + 1;
79+
}
80+
}
81+
82+
```
83+
</details>
84+
85+
```java
86+
class Solution {
87+
int findMaxAverage(int[] arr, int n, int k) {
88+
if (k > n) return -1;
89+
90+
// Compute sum of first 'k' elements
91+
int sum = arr[0];
92+
for (int i = 1; i < k; i++)
93+
sum += arr[i];
94+
95+
int max_sum = sum, max_end = k - 1;
96+
97+
// Compute sum of remaining subarrays
98+
for (int i = k; i < n; i++) {
99+
sum = sum + arr[i] - arr[i - k];
100+
if (sum > max_sum) {
101+
max_sum = sum;
102+
max_end = i;
103+
}
104+
}
105+
// Return starting index
106+
return max_end - k + 1;
107+
}
108+
}
109+
```

0 commit comments

Comments
 (0)