提示:以下是本篇文章正文内容,下面案例可供参考
1.自己的暴力解法
无
2.自己的进阶解法
class Solution {
public:
int totalFruit(vector<int>& fruits) {
vector<int> v;
int r = 0, nex = 0, sum = 0, max = 0;
while (r < fruits.size())
{
if (v.size() == 0)
{
v.push_back(fruits[r]);
++sum;
++r;
max = sum > max ? sum : max;
}
else if (v.size() == 1)
{
if (fruits[r] != v[0]) v.push_back(fruits[r]);
nex = r;
++sum;
++r;
max = sum > max ? sum : max;
}
else
{
if (fruits[r] == v[0] || fruits[r] == v[1])
{
++sum;
++r;
max = sum > max ? sum : max;
}
else
{
max = sum > max ? sum : max;
for (auto ch : v) v.pop_back();
sum = 0;
r = nex;
}
}
}
return max;
}
};
3.自己的库函数解法
无
4.题解的暴力解法
无
5.题解的进阶解法
无
6.总结
本题类似于滑动窗口。分类讨论需要很仔细啊,做的时候需要反复提交,逐用例debug才能勉强拼凑出来答案,一次还真想不全面。