(3-8)为什么r = -1 而l = 0呢?

来源:3-8 在滑动窗口中做记录 Longest Substring Without Repeating Characters

OnekickMan

2017-08-30

老师你好, 我对于边界的取值仍有疑惑,为什么右边界r取-1而不是1呢,右边界不是应该比左边界要大吗?

写回答

1回答

liuyubobobo

2017-08-31

因为我们的滑动窗口定义的是s[l...r]这样的一个区间,前闭后闭的。在算法运行前,我们希望整个滑动窗口为空,然后在后续算法中再不断调整滑动窗口的大小。根据我们的定义,初始时如果r = l = 0;则s[0...0]中已经有1个元素了(第0个元素);如果r = 1,则s[0...1]中已经有两个元素了(第0和第1个元素)。怎么表示初始的时候我们的s[l...r]为空窗口?让r=-1,s[0...-1]是一个空窗口,没有元素。


但是,如果我们定义我们的滑动窗口是s[l...r),注意,是前闭后开的区间,我们的r初始值就应该是0,相应的,后续逻辑里的一些边界就需要调整。强烈建议再仔细理解一下3-1;3-2两个小节中,用不同的边界定义书写二分查找法的方法。争取做到自己能够不看正确代码,根据自己的理解实现出来。然后试着对于这个问题(或者前面的其它问题都行),对滑动窗口定义为s[l...r]和s[l...r)做相应的实现。个人认为是非常好的理解边界的定义和维护的练习:)


加油!

1
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程