本文主要是介绍904.水果成篮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
链接:leetcode链接
思路分析(滑动窗口)
读完题目,很明显,这个题目需要我们寻找一个最长子数组,使得这个子数组里面最多存在两种不同的数字,很容易联想到使用滑动窗口。
另外,需要使用hash表来记录区间内的不同种水果的个数
首先还是left,right = 0;
进窗口:right进哈希表
判断:哈希表的size > 2,就需要出窗口
出窗口:hash[left]–的同时,要去判断是否hash[left] == 0,如果等于0,删除该元素即可
更新结果,ret = max(ret,right - left + 1)
代码
int totalFruit(vector<int>& fruits) {unordered_map<int,int> hash;int ret = 0;for(int left = 0,right = 0;right < fruits.size();++right){hash[fruits[right]]++;//进窗口while(hash.size() > 2)//这个地方在不定长窗口就是通过循环来控制窗口合法{hash[fruits[left]]--;if(hash[fruits[left]] == 0) hash.erase(fruits[left]);++left;}ret = max(right - left + 1,ret);}return ret;}
这篇关于904.水果成篮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!