首页 > 其他分享 >LeetCode 209 - 长度最小的子数组(滑动窗口法)

LeetCode 209 - 长度最小的子数组(滑动窗口法)

时间:2024-10-17 21:47:37浏览次数:8  
标签:窗口 target 209 int 数组 长度 滑动 LeetCode 指针

题目描述

给定一个含有 n 个正整数的数组和一个正整数 target,我们要找出该数组中满足其总和大于等于 target 的长度最小的子数组,即子数组 [nums_left, nums_right],并返回其长度。如果不存在符合条件的子数组,返回 0。

解题思路

我们可以使用滑动窗口解决这道问题。初始化左指针 start 和右指针 end 为 0,一个变量 min_length 记录最小长度,一个变量 sum 记录当前窗口内的和。然后我们不断移动右指针 end ,直到窗口内的和大于等于 target,然后将左指针 start 右移,缩小窗口长度,更新最小长度。重复这个过程,直到右指针到达数组末尾。

算法实现

C++实现

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int result=INT32_MAX;
        int arrlenth=0;
        int i=0;
        int sum=0;
        for(int j=0;j<nums.size();j++)
        {
            sum+=nums[j];
            while(sum>=target)
            {
                arrlenth=(j-i+1);
                result=result<arrlenth?result:arrlenth;
                sum-=nums[i++];
            }
        }
        return result==INT32_MAX?0:result;
    }
};

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组的长度。我们最多遍历每个元素两次,即左指针和右指针各一次。
  • 空间复杂度:O(1)。

总结

本题利用滑动窗口技巧,高效地解决了求解满足条件的最小子数组长度的问题。通过维护一个窗口保证窗口内的和大于等于 target,不断更新最小长度,最终得到最小满足条件的子数组长度。

希望以上内容能帮助你更好地理解 LeetCode 209 长度最小的子数组问题。如果有任何疑问,欢迎留言讨论。

标签:窗口,target,209,int,数组,长度,滑动,LeetCode,指针
From: https://blog.csdn.net/J_z_Yang/article/details/143028674

相关文章

  • LeetCode:809.情感丰富的文字(双指针 Java)
    目录809.情感丰富的文字题目描述:实现代码与解析:双指针原理思路:809.情感丰富的文字题目描述:        有时候人们会用重复写一些字母来表示额外的感受,比如 "hello"->"heeellooo", "hi"->"hiii"。我们将相邻字母都相同的一串字符定义为相同字母组,例如:"h",......
  • LeetCode LRU 缓存
    题目描述请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,intv......
  • leetcode 876. Middle of the Linked List
    leetcode876.MiddleoftheLinkedList不容易出错的写法,慢classSolution{public:ListNode*middleNode(ListNode*head){if(!head||!head->next){returnhead;}ListNode*single=head,*double_=head;int......
  • 滑动阻尼,惯性滚动列表,边界回弹,惯性回弹
    https://juejin.cn/post/7426280686695759882<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">&......
  • 代码随想录算法训练营第二天|209长度最小的子数组、59螺旋矩阵
    1leetcode209长度最小的子数组题目链接:209.长度最小的子数组文章链接:代码随想录(programmercarl.com)视频链接:拿下滑动窗口!|LeetCode209长度最小的子数组思路:没有思路,看到这道题有一种想立马退出的感觉,无从下手1.1暴力搜索1.1.1python版本这个版本的新知识就是定义......
  • Leetcode 1514. 概率最大的路径
    1.题目基本信息1.1.题目描述给你一个由n个节点(下标从0开始)组成的无向加权图,该图由一个描述边的列表组成,其中edges[i]=[a,b]表示连接节点a和b的一条无向边,且该边遍历成功的概率为succProb[i]。指定两个节点分别作为起点start和终点end,请你找出从起点到终点成......
  • Leetcode 802. 找到最终的安全状态
    1.题目基本信息1.1.题目描述有一个有n个节点的有向图,节点按0到n–1编号。图由一个索引从0开始的2D整数数组graph表示,graph[i]是与节点i相邻的节点的整数数组,这意味着从节点i到graph[i]中的每个节点都有一条边。如果一个节点没有连出的有向边,则该节点是终......
  • LeetCode第六题:锯齿形转换(Python)
    一.题目要求及实例将给定的字符串,转化为锯齿形。锯齿形的行数给定。按序输出转换后的字符串。二.初始思路(1)二维数组的大小竖着写入二维数组较困难,所以想到了先横着写,再取转置。首先需要知道二维数组的大小。参数中给的numRows即为行数,所以要考虑的就是二维数组的列数。......
  • LeetCode 1884.鸡蛋掉落-两枚鸡蛋:动态规划
    【LetMeFly】1884.鸡蛋掉落-两枚鸡蛋:动态规划力扣题目链接:https://leetcode.cn/problems/egg-drop-with-2-eggs-and-n-floors/给你2 枚相同的鸡蛋,和一栋从第1 层到第n层共有n层楼的建筑。已知存在楼层f,满足 0<=f<=n,任何从高于f的楼层落下的鸡蛋都会......
  • QT实现滑动页面切换
    1.界面实现效果以下是具体的项目需要用到的效果展示。2.简介原理:使用Qt的QPropertyAnimation动画类,这里简单来说就是切换两个界面。这个widget里面可以放很多个待切换的界面,每次切换的时候将当前界面和切换后的界面显示,其他界面都隐藏,然后当前界面移动到主界面之外,下一......