Skip to content

Sliding Window (Variable Size)

When to use

  • Longest / shortest subarray with constraint
  • All elements non-negative (important!)

Invariant

Window sum is always ≤ k.

Java

static int longestSubarraySumAtMostK(int[] a, int k) {
    int l = 0, sum = 0, ans = 0;
    for (int r = 0; r < a.length; r++) {
        sum += a[r];
        while (sum > k) sum -= a[l++];
        ans = Math.max(ans, r - l + 1);
    }
    return ans;
}