先确认窗口的含义
滑动窗口适合处理连续区间问题。动手写代码前,先明确窗口左、右边界分别代表什么,以及窗口何时应该收缩。
一个简单的思考顺序是:
- 先扩展右边界,让窗口获得新的元素。
- 当窗口不再满足约束时,移动左边界。
- 每次边界变化后,更新当前答案。
约束条件比循环形式更重要。把它写成一句可以验证的话,代码会更容易检查。
left = 0
for right, value in enumerate(values):
window.add(value)
while not window.is_valid():
window.remove(values[left])
left += 1
answer = max(answer, right - left + 1)