zoukankan      html  css  js  c++  java
  • [刷题] 209 Minimum Size Subarray Sum

    要求

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

    示例

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

    思路

    • 暴力解法(n3)
    • 滑动窗口(时间n,空间1)
      • 双索引,nums[l...r] 为滑动窗口
      • 小于s,j后移
      • 大于等于s,i后移
      • 每次移动后,若大于等于s,则更新最小长度res
      • L9:处理右边界到头的情况

     1 class Solution{
     2 public:
     3     int minSubArrayLen(int s, vector<int>& nums){
     4         int l = 0, r = -1;
     5         int sum = 0;
     6         int res = nums.size() + 1;
     7         
     8         while( l < nums.size())    {
     9             if( r+1 < nums.size() && sum < s)
    10                 sum += nums[++r];                    
    11             else
    12                 sum -= nums[l++];
    13             if(sum >= s)
    14                 res = min(res,r-l+1);
    15         }        
    16         if(res== nums.size()+1)
    17             return 0;
    18         return res;
    19     }
    20 };
    View Code

    延伸

    • 双索引技术
  • 相关阅读:
    github中建立pages
    批处理指令_windows定时关机脚本
    批处理指令_同步数据脚本
    python_笔记
    python_操作outlook
    按键精灵_一些踩过的坑
    linux_一些踩过的坑
    python_快速排序
    python_jira库的一些常用操作
    jira_一些踩过的坑
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12585766.html
Copyright © 2011-2022 走看看