1.题目
题目分析:
就是给定一个数组,如何选择一个位置开始遍历,然后子数组里只能存在俩种原数组的元素,要得到一个子数组最大的情况,每摘一个就往右边移动。
2.算法原理
题目要的是最大子数组,限制是只能有俩种元素,那么就可以遍历所有情况,一直更新子数组的长度值。遇到第三个元素时,就要开始拍出元素了,因为只能有俩个,就要把选定位置进行移动,直到把第三个元素排出去来进行计算长度,因为要记录元素和这个元素出现的个数,就需要哈希表来进行管理,这个过程可以用双指针进行,right和left来,一个作为起点,一个来移动遍历。
3.代码实现
哈希表中元素计数为0要记得删除
class Solution {
public:
int totalFruit(vector<int>& fruits) {
unordered_map<int,int> hash;
int n=fruits.size();
int lenth=0;
for(int left=0,right=0;right<n;right++)
{
hash[fruits[right]]++;
while(hash.size()>2)
{
hash[fruits[left]]--;
if(hash[fruits[left]]==0)
hash.erase(fruits[left]);
left++;
}
lenth=max(lenth,right-left+1);
}
return lenth;
}
};