当前位置: 首页 > news >正文

904. 水果成篮

目录

  • 一、题目
  • 二、思路
    • 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 举一反三

分治去思考解题很有帮助

http://www.dtcms.com/a/44839.html

相关文章:

  • 前端实现rsa加密功能
  • 线程池的介绍
  • Linux-ftrace-双nop机制的实现
  • c# winform程序 vs2022 打包生成安装包
  • # 代码写作风格:优雅编程的艺术
  • 一文掌握 Scrapy 框架的详细使用,包括实战案例
  • 【SQL】掌握SQL查询技巧:数据分组与排序
  • 优艾智合机器人日本子公司成立,加速推进国际化布局
  • Redis大key
  • Zynq移植canopen协议站canfestival+控制电机运动
  • 使用AI后为什么思考会变得困难?
  • 2.4 自动化评测答疑机器人的表现-大模型ACP模拟题-真题
  • k8s拉取harbor镜像部署
  • 3 算法1-4 过河卒
  • CineMaster: 用于电影文本到视频生成的 3D 感知且可控的框架。
  • word中把latex公式快速转换为word公式
  • 第二章 activiti “开发环境搭建训练营”
  • 通信原理速成笔记(信息论及编码)
  • 蓝桥 发现环
  • Leetcode-最大矩形(单调栈)
  • 【数据集】ACM数据集
  • Python Cookbook-2.20 在 Python 的搜索路径中寻找文件
  • Leetcode-柱状图中最大的矩形(单调栈)
  • 进程信号
  • 大模型在白血病诊疗全流程风险预测与方案制定中的应用研究
  • 【AIGC系列】4:Stable Diffusion应用实践和代码分析
  • 大语言模型中的 Token:它们是什么,如何工作?
  • 如何调试Linux内核?
  • 【Java】I/O 流篇 —— 打印流与压缩流
  • 无人系统:未来科技的智能化代表