给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。

示例:

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

如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。

思路:

双指针法:

设定上下界,从0开始,右指针一直向右遍历,累加遍历过的值,当和大于等于s时,减去第一个值,如果还是大于等于s,减去第二个值,以此类推,一直遍历到最后。

提交的代码:

class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int i=0,j=0,sum=0,t=2147483647;//sum记录当前和,t记录当前和是几个值的相加
         while(sum>=s||(i<nums.length&&j<nums.length))   //这里sum>=s比较重要,比如s=7,数组最后三项是2,4,3,如果不加,因为此时j已经达到退出循环的条件,会退出,然后sum=9,t=3;所以加这个条件使得继续执行else if中的操作
         {
             if(sum<s)
             {
                 sum+=nums[j];
                 j++;
             }
             else if(sum>=s)
             {
                 if(j-i<t)
                 {
                     t = j-i;
                 }
                 sum-=nums[i];
                 i++;
             }
         }
         if(t==2147483647)
         {
             return 0;
         }
          return t;  
    }
}

完整的代码:

public class Solution209 {
     public static int minSubArrayLen(int s, int[] nums) {
         int i=0,j=0,sum=0,t=2147483647;//sum记录当前和,t记录当前和是几个值的相加
         while(sum>=s||(i<nums.length&&j<nums.length))
         {
             if(sum<s)
             {
                 sum+=nums[j];
                 j++;
             }
             else if(sum>=s)
             {
                 if(j-i<t)
                 {
                     t = j-i;
                 }
                 sum-=nums[i];
                 i++;
             }
         }
         if(t==2147483647)
         {
             return 0;
         }
          return t;  
        }
     public static void main(String[] args)
     {
         int[] nums = {2,3,1,2,4,3};
         int s = 7;
         System.out.println(minSubArrayLen(s,nums));
     }
}

Leetcode--209. 长度最小的子数组相关推荐

  1. 代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、​LeetCode 209.长度最小的子数组、LeetCode 59.螺旋矩阵II

    LeetCode 977.有序数组的平方 双指针法:数组其实是有序的, 只不过负数平方之后可能成为最大数了.那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间.此时可以考虑双指针法 ...

  2. LeetCode—209. 长度最小的子数组

    209. 长度最小的子数组 题目描述:给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ...

  3. leetcode —— 209. 长度最小的子数组

    给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, num ...

  4. leetcode 209.长度最小的子数组

    1 题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, num ...

  5. LeetCode——209.长度最小的子数组

    https://leetcode-cn.com/problems/minimum-size-subarray-sum/submissions/ @代码随想录 1.暴力解法 class Solution ...

  6. LeetCode 209. 长度最小的子数组

    思路: 评论区的大佬太强了,搬运. len 表示 结果:j表示此片段的最左索引:sum表示片段和 先遍历,逐个递加,直到大于s 时,再去缩短长度. public int minSubArrayLen( ...

  7. [leetcode]209. 长度最小的子数组

    暴力: class Solution {public:int minSubArrayLen(int s, vector<int>& nums) {bool flag = false ...

  8. 【Leetcode数组--子数组--滑动窗口】209. 长度最小的子数组 904. 水果成篮 1004. 最大连续1的个数 III 76. 最小覆盖子串(有数组操作中重要的方法:滑动窗口!!!!)

    文章目录 Leetcode209 1.问题描述 2.解决方案 解法一:两个错误思路的算法 解法二:暴力 解法三:滑动窗口法(O(n)) Leetcode904 1.问题描述 2.解决方案 Leetco ...

  9. Leonard代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。

    第一章数组 (今日任务) 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结 建议大家先独立做题,然后看视频讲解,然后看文章讲解,然后在重新做一遍题,把题目AC,最后整理 ...

  10. 代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II

    代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II 一. LeetCode977.有序数组的平方 1. 题目链接[LeetCode9 ...

最新文章

  1. 工具推荐:Astah Community 绘制图形
  2. 『原创』用C++开发WM应用系列(6)——深化ListBox控件
  3. git 恢复被覆盖本地提交内容
  4. 【Python】 获取MP3信息replica
  5. 动态排序JavaBean
  6. 为什么很多人说 Java 不适合编写桌面应用?
  7. 信用评分python_信用评分卡(python)
  8. 可重复使用的MicroProfile Health探针
  9. Word中摘要和正文同时分栏后,正文跑到下一页,怎么办?或Word分栏后第一页明明有空位后面的文字却自动跳到第二页了,怎么办?...
  10. 如何把一个数据库的数据copy到另外一个数据库
  11. 优化算法——差分进化算法(DE)
  12. Netfilter的rpfilter技术-Linux的uRPF
  13. cpu功耗排行_常见NAS CPU处理器性能排行榜(简单天梯图)
  14. python里面fabs什么意思_介绍Python中的fabs()方法的使用
  15. ProcessOn‘s Bug--完善个人资料无限扩容
  16. int,long和long long的区别
  17. 测验1: Python快速入门 (第2周)
  18. iOS中视频播放的学习
  19. 腾讯、阿里开始正面交锋新零售,双寡头就代表未来吗?
  20. 段码屏中液晶相与相变的含义?

热门文章

  1. 程序员面试金典 - 面试题 17.04. 消失的数字(数学/位运算)
  2. LeetCode 695. 岛屿的最大面积(图的BFS/DFS)
  3. python concat_python-pd.concat()不合并在同一索引上
  4. Linux命令行配置静态IP地址
  5. ubuntu server安装hadoop和spark,并设置集群
  6. ADS1.2开发环境创建与简要介绍
  7. 软件开发 thoughtworks 技术面_【软件开发】10月29日比赛详细预告
  8. 技术动态 | 去中心化知识图谱协作平台建设实践
  9. 笔记:seafile 7.x 安装和部署摘要
  10. 文献阅读课10-Neural Relation Extraction for Knowledge Base Enrichment(提取+嵌入+消歧+规范化联合模型,实体已知,仅关系抽取,多词实体)