Skip to content

Commit 9caba04

Browse files
committed
optimal- finds max sum of subarray of window size K, O(N) Time, O(1) space
1 parent 7174f73 commit 9caba04

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

GeeksForGeeks/SlidingWindow/MaximumSubarraySum.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,55 @@
22

33
public class MaximumSubarraySum {
44

5-
// brute force approch - O(N^2) Time | O(1) Space
5+
// brute force approch - O(N*k) Time | O(1) Space
66
public static int maxSubarraySum(int[] arr, int k) {
77

88
int maxsum = Integer.MIN_VALUE;
99

1010
for (int i = 0; i <= arr.length - k; i++) {
11-
int currsum = 0;
11+
int windowsum = 0;
1212

1313
for (int window = 0; window < k; window++) {
14-
currsum += arr[i + window];
14+
windowsum += arr[i + window];
1515
}
16-
maxsum = Math.max(maxsum, currsum);
16+
maxsum = Math.max(maxsum, windowsum);
17+
}
18+
19+
return maxsum;
20+
}
21+
22+
// O(N) Time | O(1) Space
23+
public static int maxSubarraySum2(int[] arr, int k) {
24+
25+
int maxsum = Integer.MIN_VALUE;
26+
int head = 0, tail = k, n = arr.length;
27+
28+
int windowSum = 0;
29+
for (int i = 0; i < k; i++) {
30+
windowSum += arr[i];
31+
}
32+
maxsum = Math.max(maxsum, windowSum);
33+
34+
for (int slide = 1; slide <= n - k; slide++) {
35+
36+
if (head < n && tail < n) {
37+
windowSum -= arr[head];
38+
windowSum += arr[tail];
39+
head++;
40+
tail++;
41+
}
42+
maxsum = Math.max(maxsum, windowSum);
1743
}
1844

1945
return maxsum;
2046
}
2147

2248
public static void main(String[] args) {
2349
int[] arr = { 1, 4, 2, 10, 23, 3, 1, 0, 20 };
50+
// int[] arr = { 100, 200, 300, 400 };
2451
int windowSize = 4;
52+
2553
System.out.println(maxSubarraySum(arr, windowSize));
54+
System.out.println(maxSubarraySum2(arr, windowSize));
2655
}
2756
}

0 commit comments

Comments
 (0)