原题目:https://leetcode-cn.com/problems/fruit-into-baskets/
思路:
双指针,使用f1,f2记录两种树的种类,依次判断每一个树,如果树的种类在f1和f2之中,fast++,
但出现第三种树的时候,记录下当前最大的长度,然后slow递增到树的种类不是f1为止。
重复上述过程。
代码;
class Solution {
public:
int totalFruit(vector<int>& tree) {
int f1=-1,f2=-1;
int slow=0,fast=0,ans=0;
while(fast<tree.size()){
if(f1==-1) f1=tree[fast++];
else if(tree[fast]==f1) fast++;
else if(f2==-1) f2=tree[fast++];
else if(f2==tree[fast]) fast++;
else{
ans = max(ans,fast-slow);
while(slow<tree.size()&&tree[slow]==f1) slow++;
fast=slow+1;
f1=f2;f2=-1;
}
}
ans = max(ans,fast-slow);
return ans;
}
};