算法刷题营【Day2】:: 双指针算法应用:滑动窗口 :209. 长度最小的子数组

这篇具有很好参考价值的文章主要介绍了算法刷题营【Day2】:: 双指针算法应用:滑动窗口 :209. 长度最小的子数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本内容是笔者结合《代码随想录》总结所得,记录学习过程,分享知识!


目录:
1. 开篇例题:209. 长度最小的子数组
2. 题解参考

- - 2.1 方法一:暴力法
- - 2.2 方法二:滑动窗口

3. 方法思路点拨:滑动窗口

- - 3.1 直白解释
- - 3.2 本题思路点拨

4. 相关题集


1. 开篇例题:209. 长度最小的子数组

例题:点击直飞

算法刷题营【Day2】:: 双指针算法应用:滑动窗口 :209. 长度最小的子数组


2. 题解参考

2.1 方法一:暴力法
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        // 双循环暴力法
        int sum = 0;
        int res = INT32_MAX;
        int len = 0;
        for(int i = 0;i<nums.size();i++){   // 设置子数组起始点
            sum = 0;
            for(int j = i;j<nums.size();j++){   // 探索子数组终点
                sum += nums[j];
                if(sum >= target){
                    len = j-i+1;                // 子列长度
                    res = res > len?len:res;
                    break;
                }
            }
        }
        return res == INT32_MAX? 0:res;
    }
};
2.2 方法二:滑动窗口
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        // 滑动窗口
        int res = INT32_MAX;
        int len = 0;            // 子数列长度
        int i =0;               // 子列起始位
        int sum = 0;
        for(int j = 0; j<nums.size() ;j++){
            sum += nums[j];
            while(sum >= target){       // 核心代码
                len = j-i+1;            // 获取合法子数列长度
                res = res > len ? len : res;
                sum -= nums[i++];          
                // 子列起始位长度调整,改写法规避了可能单次移动遇到负数引起的重复操作!
            }
        }
        return res == INT32_MAX?0:res;
    }
};

3. 方法思路点拨:滑动窗口

3.1 双指针算法应用:滑动窗口

滑动窗口的思路即:使用两个指针维护一个区间【通常是左闭右闭区间】,这区间具有可变性,类似与二分法中的边界重定向,使得区间减小。
但此处的滑动窗口显然高级:可变大、可变小!【窗口大小依据问题情景而定】(如下图)

算法刷题营【Day2】:: 双指针算法应用:滑动窗口 :209. 长度最小的子数组

3.2 本题思路点拨

依据题设,我们需要找到一个区间,该区间内的元素之和满足不小于指定值。同时需要满足:找到的区间是最小的。
此题即可使用滑动窗口去探索最小区间!

4. 相关题集

待选中文章来源地址https://www.toymoban.com/news/detail-442205.html

到了这里,关于算法刷题营【Day2】:: 双指针算法应用:滑动窗口 :209. 长度最小的子数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 刷题(双指针思想/滑动窗口思想/l螺旋矩阵)

    刚开始自己做就是无脑ac的,sort: 但是时间复杂度有问题, 是O(nlogn)的时间复杂度 提升:用双指针的思想:时间复杂度为O(n) 使用 双指针 的思想解决本题的思路: 以数组 为例: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 因为输入的数组是递增的,因此,平方后的最大值,只

    2023年04月08日
    浏览(38)
  • 【剑指offer刷题记录 java版】数组双指针 之 滑动窗口

    本系列文章记录labuladong的算法小抄中剑指offer题目 题目链接:https://leetcode.cn/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/ 题目链接:https://leetcode.cn/problems/MPnaiL/ 题目链接:https://leetcode.cn/problems/VabMRr/ 题目链接:https://leetcode.cn/problems/wtcaE1/ 题目链接:https://leetcode.cn/pr

    2024年02月09日
    浏览(39)
  • 【leetcode刷题之路】面试经典150题(2)——双指针+滑动窗口+矩阵

    2 双指针 2.1 【双指针】验证回文串 题目地址:https://leetcode.cn/problems/valid-palindrome/description/?envType=study-plan-v2envId=top-interview-150   详见代码。 2.2 【双指针】判断子序列 题目地址:https://leetcode.cn/problems/is-subsequence/description/?envType=study-plan-v2envId=top-interview-150   双指针挨个遍

    2024年02月19日
    浏览(34)
  • 算法刷题营【Day3】:: 链表篇:单链表结点删除思路:一题辨别哨兵结点的优势(删除有奇效):203. 移除链表元素

    本内容是笔者结合《代码随想录》总结所得,记录学习过程,分享知识! 目录: 1. 开篇例题:203. 移除链表元素 2. 题解参考 - - 2.1 方法一:原表操作(不含哨兵结点) - - 2.2 方法二:虚设哨兵结点辅助法 - - 2.3 方法三:递归法 3. 单链表结点删除思路 4. 方法思路点拨:原表操

    2024年02月06日
    浏览(33)
  • 考研算法35天:三元组的最小距离 【双指针,滑动窗口,多路归并】

    多路归并;多路归并算法从理论到应用(易懂)_留恋单行路的博客-CSDN博客 多路归并就是将多个已经归并排序排好序的数组再进行排序(不一定是通过归并排序)。 这道题就是一般做法是先通过排序将三个数组排好然后再进行三指针求最小。但是我们仔细考虑一下,如果我们先

    2024年02月12日
    浏览(24)
  • 趣味算法:滑动窗口算法的理解与应用

    在编程和数据结构中,滑动窗口算法是一种常见的解决问题的方法。它主要用于处理涉及连续或固定长度子数组、子序列或子字符串的问题。本文将深入探讨滑动窗口算法,包括其基本概念、应用场景、基本步骤以及具体的Java代码实践。 滑动窗口算法是一种优化技巧,主要

    2024年02月11日
    浏览(26)
  • 【C刷题】day2

    1、以下程序段的输出结果是( ) A: 12 B: 13 C: 16 D: 以上都不对 【答案】: A 【解析】: 考点:转义字符 \\\\表示反斜杠,取消转义的作用 123表示八进制的123 t表示水平制表符,相当于Tab键 这些都是算一个字符,其他都是单独一个为一个字符,故为12个 2、若有以下程序,则运

    2024年02月07日
    浏览(25)
  • LeetCode刷题记录——day2

    https://leetcode.cn/problems/product-of-array-except-self/description/?envType=study-plan-v2envId=top-interview-150 问题在于不使用除法并且空间复杂度为 O(1) ,当第一次从头开始遍历时由于不知道后续数组元素是什么,所以无法得到答案,而如果当知道一个后续数组元素后,又回去更新答案的话,无

    2024年03月20日
    浏览(67)
  • 【SQL刷题】Day2----SQL语法基础查询

    Day2----SQL语法基础查询 博主昵称:跳楼梯企鹅 博主主页面链接:博主主页传送门 博主专栏页面连接:专栏传送门--网路安全技术 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。 博主座右铭

    2023年04月08日
    浏览(25)
  • 【刷题】滑动窗口入门

    送给大家一句话: 那脑袋里的智慧,就像打火石里的火花一样,不去打它是不肯出来的。——莎士比亚 今天我学习了滑动窗口的算法思路,接下来请与我一起看看吧!!! 滑动窗口问题可以说是一种特殊的双指针问题,通常用于解决以下类型的问题: 连续子数组或子字符串

    2024年03月26日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包