Start from the invariant.
66 of 66 templates
Sliding window
Sliding window
Maintain a valid contiguous interval.
Interview essentialsWhen to use it
Find the longest contiguous array segment whose sum is at most a limit. Every value must be nonnegative.
What stays true
After shrinking, sum equals the total in [left, right] and is at most the limit. Removing another left value cannot produce a longer valid segment ending here.
- Time
- O(n)
- Extra space
- O(1)
Pattern.java
import java.util.*;
public class Pattern {
public static int longestWindow(long[] nums, long limit) {
if (limit < 0) return 0;
int left = 0, best = 0;
long total = 0;
for (int right = 0; right < nums.length; right++) {
total += nums[right];
while (total > limit) total -= nums[left++];
best = Math.max(best, right - left + 1);
}
return best;
}
}
Use Pattern.java as a helper class, or move these methods into your judge’s required class.
nums = [2, 1, 3, 1], limit = 4 → 2. Both [2, 1] and [3, 1] have length 2.
Keep the sum at most 4
Extend
- 02(active)
- 11(active)
- 23
- 31
[2, 1] sums to 3 and has length 2.
1 / 4