Eliminate repeated recalculation. Slide a window across the array — add new element, remove old. O(n×k) → O(n).
arr[right] (new element entering) and subtract arr[right - k] (left element leaving). The left index is always right - k — no need for a separate left variable!right - left + 1.left > right. If you need a guard, add if left < right before shrinking.def max_sum_k(arr, k): # Build first window window = sum(arr[:k]) best = window # Slide: add right element, remove left for right in range(k, len(arr)): window += arr[right] # enters window -= arr[right - k] # leaves (left = right-k) best = max(best, window) return best
def length_of_longest(s): seen = set() left = 0; best = 0 for right in range(len(s)): # shrink from left until no duplicate while s[right] in seen: seen.remove(s[left]) left += 1 seen.add(s[right]) best = max(best, right - left + 1) return best # Min subarray length with sum >= target def min_sub_len(target, nums): left = total = 0; best = float('inf') for right in range(len(nums)): total += nums[right] while total >= target: best = min(best, right - left + 1) total -= nums[left]; left += 1 return best if best != float('inf') else 0