首页 > 其他分享 >【leetcode】数组篇刷题 --滑动窗口

【leetcode】数组篇刷题 --滑动窗口

时间:2024-02-25 22:45:59浏览次数:27  
标签:map rp -- leetcode int result lp 滑动 篇刷题

/*
 * @lc app=leetcode.cn id=209 lang=cpp
 *
 * [209] 长度最小的子数组
 * 找最短的子数组
 */

// @lc code=start
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        //滑动窗口,
        //一个计算总和
        int sum = 0;
        //一个记录当前最短子串长度结果,
        int result = INT32_MAX;
        //一个慢指针,一个快指针,快指针匹配到子串,通过收缩慢指针达到缩小窗口(滑动窗口),
        int lp = 0;
        int rp = 0;
        int subLength = 0;
        for(;rp < nums.size(); rp++){
            //计算当前滑动窗口内子串长度
            sum += nums[rp];

            //匹配到了sum == target的子串
            while(sum >= target){
                subLength = (rp - lp + 1);
                result = result < subLength ? result : subLength;
                //滑动窗口向右移动(即向右缩小滑动窗口)
                sum -= nums[lp++];
            }

        }
        return result == INT32_MAX ? 0 : result;
    }
};
// @lc code=end


/*
 * @lc app=leetcode.cn id=904 lang=cpp
 *
 * [904] 水果成篮
 */

// @lc code=start
class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        //一个map统计果篮中A,B两种水果各自的数量,一但果篮中放入水果C,就扔掉所有A类水果
         unordered_map<int, int> map;
        //一对快慢指针
        int rp = 0;
        int lp = 0;
        //记录最长子序列
        int result = 0;
        for(;rp < fruits.size(); rp++){
            // ++map[fruits[rp]];
            //记录某一类型水果并统计其数量
            map[fruits[rp]]++;
            //果篮中放入了第3种水果
            while(map.size() > 2){
                //扔掉最先放入的所有A类水果
                //获取指向该键值对的迭代器
                auto it = map.find(fruits[lp]);
                //first为key,second为value
                (it->second)--;
                //A类水果已扔完
                if(it->second == 0){
                    map.erase(it);
                }
                //扔水果的同时缩小滑动窗口(仍水果正是处于此目的)
                lp++;
            }
            

            result = max(result, rp - lp + 1);
        }
        return result;

    }
};
// @lc code=end


标签:map,rp,--,leetcode,int,result,lp,滑动,篇刷题
From: https://www.cnblogs.com/MR---Zhao/p/18031119

相关文章

  • WPF 控件(图)
    参考.NETAPIbrowser控件库gptWPF控件专题BulletDecorator控件详解C#三种方式实现List转字符串WPF教程环境软件/系统版本说明WindowsWindows10专业版22H219045.4046MicrosoftVisualStudioMicrosoftVisualStudioCommunity2022(64位)-1......
  • 程序是怎么跑起来的第十一章
    计算机是软件组合,如果计算机没有软件就仅仅是个箱子,利用操作系统提供的系统调用的功能,就可以实现对硬件的控制,系统调用成为API,应用系统简介控制硬件,而DMA啊hide是不经过CPU中介处理,外围设备直接同计算机的主内存进行数据传输,像磁盘这样用来处理大量数据的外围设备都具有DMA功能,支......
  • java中的基础方法使用
    何谓方法?◆System.out.printIn(),那么它是什么呢?◆Java方法是语句的集合,它们在一起执行一个功能。◆方法是解决一类问题的步骤的有序组合◆方法包含于类或对象中◆方法在程序中被创建,在其他地方被引用设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我......
  • ThreadLocal
    1.用来存储数据:set()/get()2.使用ThreadLocal存储的数据,线程安全3.用完调用remove方法释放(否则可能发生内存泄漏)`/**ThreadLocal工具类*/@SuppressWarnings("all")publicclassThreadLocalUtil{//提供ThreadLocal对象,privatestaticfinalThreadLocalTHREAD_LOCA......
  • 程序是怎样跑起来的第十二章读后感
    读到程序是怎样跑起来的最后一章,让我更清楚的认识计算机运行原理和计算机的组成部分,第十二章总的来说就是计算机程序的运行就类似于人的思考,程序的使用目的划分为两类一类是大家作为工具来使用的程序。另外一个使用目的是用程序来代替执行人类的思考过程。用程序的运行来近一步表......
  • 开源产品测评之 SQL 上线能力
    背景 近期,我司准备引入一款SQL审核产品来供内部流程使用,解决目前SQL人工上线的流程管控问题,目标是对业内的开源产品进行调研,选型一款作为落地方案,后期如果内部有需求可能会进行二次开发。我们最终选取 SQLE[1]、Yearning[2]、Archery[3] 进行了初步的使用和调研,我们内部......
  • winter 2024 第五周周报
    内容day1打的牛客寒假4,有一道挺可惜的吧,J题后面补的,一道三点共线+状压dp,没怎么学几何的东西,然后也没有准备几何的板子(就连三点共线的板子都没找到qwq)。还有F题,赛时没有一点思路看别人的代码说实话也看不太懂,一道dp吧,感觉自己dp这方面真的不行qwqday3https://www.cnblogs.com/b......
  • Field Should Not Be Empty
    这道题目的思想非常新首先我们按照比较传统的想法,考虑交换两个位置\(i\)和\(j\)能带来什么影响然后这就是这道题目的精华所在了,我们考虑影响的时候,没有必要去精确每一个位置的两个信息(左边更大的数的个数和右边更小的数的个数)怎么样变化,而是只用考虑这一次交换会让答案增大多少......
  • MySQL备份恢复数据--binary-mode is enabled and mysql is run in non-interactive...
    使用mysqldump;MySQL自带的逻辑备份工具。mysqldump[选项]数据库名[表名]>脚本名mysqldump[选项]--数据库名[选项表名]>脚本名mysqldump[选项]--all-databases[选项]>脚本名备份mysqldump-hlocalhost-uwordpress-pwordpress_20200104>c......
  • 树套树
    树套树树状数组,(动态开点线段树),平衡树二逼平衡树您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:查询\(k\)在区间内的排名查询区间内排名为\(k\)的值修改某一位值上的数值查询在区间内的前驱(前驱定义为小于,且最大的数)查询\(......