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

    延伸

    • 双索引技术
  • 相关阅读:
    plsql-游标
    pl/sql--基本的语法及操作
    Oracle数据库管理
    JMS-ActiveMq-订阅发布模式
    JMS-ActiveMq-点对点模式
    JMS-ActiveMq
    poi之excel的模板导入(随后分享)
    数据流写出util
    dba_tables、all_tables、user_tables
    oracle的一些操作
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12585766.html
Copyright © 2011-2022 走看看