首页 > 编程语言 >算法第七天:leetcode之209.长度最小的子数组

算法第七天:leetcode之209.长度最小的子数组

时间:2024-06-17 13:00:06浏览次数:38  
标签:target 209 sum 最小 result 数组 长度 leetcode 第七天

一、长度最小的子数组

    209.长度最小的子数组的链接:https://leetcode.cn/problems/minimum-size-subarray-sum/

  给定一个含有 n 个正整数的数组和一个正整数 target 。

  找出该数组中满足其总和大于等于 target 的长度最小的 子数组[numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

  示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4, 3]是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

 示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

  提示:

  • 1 <= target <= 109
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105

  进阶:

  • 如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。

  双指针滑动窗口的基础知识如下链接所示,感兴趣的读者可以点击或者复制该链接进行查阅和学习:

 https://mp.csdn.net/mp_blog/creation/editor/139633714

   本题使用滑动窗口的算法知识解题,以下是部分c++代码(省略力扣给出的代码块内容):

        int sum=0, i=0;
        int l=0;
        int result=INT32_MAX;
        for(int j=0;j<nums.size();j++){
            sum+=nums[j];
            while(sum>=target){
                l=j-i+1;
                result=min(result, l);
                sum=sum-nums[i];
                i++;
            }
        }
        return result==INT32_MAX ? 0 : result;

二、长度最小的子数组的基本思路

  1.  定义起始位置i,和终止位置j,然后不断调节子序列的起始位置和终止位置,定义一个最大值result去查找通过不断调节找最小的子数组;
  2. 用for循环查找,先求滑动窗口的数值之和,在和目标值target比较;
  3. 为什么用while循环?因为要一直循环查找,而且还要判断条件,所以用while循环比较好。取子序列的长度i,然后去找最小的子数组,sum=sum-num[i++],通过更新i的值,从而去不断变更初始位置i;
  4. 最后如果result没有被赋值,则返回0,说明没有符合条件的子序列。如果被赋值,则返回result。

 三、结言

    感谢各位读者的阅读与支持,您的支持是我前进的动力!我希望我的博文能够带给您有用的滑动窗口算法知识和启发。如果您有任何问题或意见,请随时联系我或在评论区评论。希望本题的算法知识对大家有帮助,我会一直持续更新算法知识的博客哦,谢谢各位读者的支持!!!

标签:target,209,sum,最小,result,数组,长度,leetcode,第七天
From: https://blog.csdn.net/m0_75068978/article/details/139726019

相关文章

  • 团队冲刺第七天
    过去一天完成了哪些任务对专栏进行开发,可以发文章,查看文章接下来的计划优化各个页面继续学习flutter和Springboot完成AI对话的测试还剩下哪些任务优化主页面专栏功能的管理的优化内置AI对话功能进行测试遇到了哪些困难边学习边进行功能开发问题多多Springboo......
  • LeetCode27. 移除元素题解
    LeetCode27.移除元素题解题目链接:https://leetcode.cn/problems/remove-element/题目描述:给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元......
  • Q33 LeetCode18 四数之和
    1.与三数之和类似2.定前两个数,后面使用双指针移动3.注意109需要用long接,int就超出界限了4.while(left<right&&nums[left]==nums[++left]);一个循环去除重复 1classSolution{2publicList<List<Integer>>fourSum(int[]nums,inttarget){3if(nu......
  • 最实用的 LeetCode 刷题指南
    暑期实习基本结束了,校招即将开启。当前就业环境已不再是那个双向奔赴时代了。求职者在变多,岗位在变少,要求还更高了,最近社群又开始活跃起来了,各种讨论、各种卷。为方便大家快手入手、节省时间,我整理了一份算法指南:汇总合集:内容不仅仅是大模型,也包括LeetCode刷题技巧《......
  • 209. Minimum Size Subarray Sum
    Givenanarrayofpositiveintegersnumsandapositiveintegertarget,returntheminimallengthofasubarraywhosesumisgreaterthanorequaltotarget.Ifthereisnosuchsubarray,return0instead.Example1:Input:target=7,nums=[2,3,1,2,......
  • 【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water
    欢迎收藏Star我的MachineLearningBlog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star,有问题可以随时与我交流,谢谢大家!链接:11-盛最多水的容器直觉这个问题可以通过可视化图表来理解和解决。通过图形化这个问题,可以简化解决过程。......
  • 【LeetCode最详尽解答】15-三数之和 3sum
    欢迎收藏Star我的MachineLearningBlog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star,有问题可以随时与我交流,谢谢大家!链接:15-三数之和直觉示例:输入:nums=[-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:nums[......
  • 代码随想录 算法训练营 day10 leetcode232 用栈实现队列 Leetcode225 用队列实现栈 Le
    Leetcode232用栈实现队列题目链接讲解用两个栈实现队列每次需要出队列或者查看队头元素时,将输入栈的所有元素放到输出栈classMyQueue{Stack<Integer>stackIn;Stack<Integer>stackOut;publicMyQueue(){stackIn=newStack<>();//负责进......
  • 算法训练(leetcode)第九天 | 232. 用栈实现队列、225. 用队列实现栈、20. 有效的括号、1
    刷题记录232.用栈实现队列225.用队列实现栈20.有效的括号1047.删除字符串中的所有相邻重复项232.用栈实现队列leetcode题目地址考察栈与队列之间的特性。栈:后进先出(先进后出)——FILO。队列:先进先出——FIFO。所以使用两个栈模拟队列,分别为in和out。当入队新......
  • 4-字符串-11-反转字符串-LeetCode344
    4-字符串-11-反转字符串-LeetCode344LeetCode:题目序号344更多内容欢迎关注我(持续更新中,欢迎Star✨)Github:CodeZeng1998/Java-Developer-Work-Note技术公众号:CodeZeng1998(纯纯技术文)生活公众号:好锅(Lifeismorethancode)CSDN:CodeZeng1998其他平台:CodeZeng1998、......