Leetcode904
题目:
示例:
解题:
方法:滑动窗口
分析:
- 分析题目,可知是求种类为2的最长子序列。
- 利用双指针实现滑动窗口,开始指针用于探索新的品种,末尾指针则用于标示此时序列的开始位置。
- 本题的关键在于,如何移动末尾指针的位置。
- 利用index指针来标示前一个品种结束的位置。只有品种数已经为2时,加入新品种后,末尾指针需要移动到index指针的位置,以此来保证,排除掉所有上一个品种的树,同时又满足包含所有下一个品种的树。
def totalFruit(self, fruits: List[int]) -> int:
result = float("-inf")
index = 0
l = 0
bucket = []#用于存储品种的种类
for i in range(0,len(fruits)):
if fruit[i] not in bucket:
if len(bucket)<=1:
bucket.append(fruit[i])
else:
#关键一步,确定l的下一个位置
l = index
bucket.clear()
bucket.append(fruit[i-1])
bucket.append(fruit[i])
if fruit[i]!=fruit[index]:
index = i
result = max(result,i-l+1)
return result