怎么建立一个免费网址seo关键词优化公司哪家好
目录
- 一、题目
- 二、思路
- 2.1 解题思路
- 2.2 代码尝试
- 2.3 疑难问题
- 三、解法
- 四、收获
- 4.1 心得
- 4.2 举一反三
一、题目
二、思路
2.1 解题思路
2.2 代码尝试
#include <map>
class Solution {
public:int totalFruit(vector<int>& fruits) {std::map<int, int> pla;int l=0,r=0;int cur=0;//统计当前收集的水果数目int ret=0;//统计采摘的最大数目//开始采集,先按当前的第一个采集,统计窗口内采集情况while(r<fruits.size()){//窗口内每次遍历一个值,就把他加入哈希表,并维护哈希表pla[fruits[r]]++;//如果哈希表的长度大于2,说明需要把l键删除if(pla.size()<=2){cur++;ret=max(cur,ret);}else{cur--;pla.erase(fruits[l]);l++;r++;ret=max(cur,ret);}//判断如果哈希表长度超出2或者篮子数目不够了}//如果当前窗口不满足,限制了右指针的发展,那就更新左指针,然后再在此基础上继续更新右指针滑动窗口 return ret;}
};
想用哈希表来维护滑动窗口中的数据
2.3 疑难问题
三、解法
class Solution {
public:int totalFruit(vector<int>& fruits) {int n = fruits.size();unordered_map<int, int> cnt;int left = 0, ans = 0;for (int right = 0; right < n; ++right) {++cnt[fruits[right]];while (cnt.size() > 2) {auto it = cnt.find(fruits[left]);--it->second;if (it->second == 0) {cnt.erase(it);}++left;}ans = max(ans, right - left + 1);}return ans;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/fruit-into-baskets/solutions/1893352/shui-guo-cheng-lan-by-leetcode-solution-1uyu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
四、收获
4.1 心得
感觉思路已经很接近了,但是哈希表那边的写法有点忘记,另外逻辑思路也有点并不是很清晰。滑动窗口的里面那个收敛的判断条件应该是如何收敛左边边界,判断条件是不满足窗口
4.2 举一反三
分治去思考解题很有帮助