执行出错:可能是内存空间不足,数组开小了
class Solution {
public:
int totalFruit(vector<int>& fruits) {
// 滑动窗口解题
// 3要点:
// 1、窗口内元素是什么
// 2、如何移动窗口的起始位置
// 3、如何移动窗口的终止位置
int result = INT_MIN;
int type = 0; // 篮子里面的水果种类,最多只有2种
int subLength = 0; // 滑动窗口长度
int basket[100000] = {0}; // 滑动窗口中篮子每类水果的数量
int i = 0; // 滑动窗口起始位置
for (int j = 0; j < fruits.size(); j++) {
if (basket[fruits[j]] == 0) { // 如果此类水果未出现过,则type++
type++;
}
if (type <= 2) { // type<=2,更新最大窗口值
subLength = (j - i + 1);
result = result > subLength ? result : subLength;
}
basket[fruits[j]]++; // 更新每类水果总数
// 精髓:收缩左边界(子数组的起始位置),不断变更i
while (type > 2 && i < fruits.size()) {
basket[fruits[i]]--;
if (basket[fruits[i]] == 0) {
type--;
}
i++;
}
}
return result == INT_MIN ? 0 : result;
}
};