Skip to content

Latest commit

 

History

History
63 lines (47 loc) · 1.95 KB

209.md

File metadata and controls

63 lines (47 loc) · 1.95 KB

✏️Leetcode基础刷题之(209. Minimum Size Subarray Sum)

2019-10-19 吴亲库里 库里的深夜食堂


✏️描述

给定一个n长度的整形数组n以及一个确定的值s。找出总和大于等于s的连续子数组最小长度。如果没有(即总和加起来还没给定值大),直接返回0


✏️题目实例

✏️题目分析

首先我们肯定需要定义一个变量用来存储最后的值,先给定int的最大值。我们还需要定义一个变量用来存储左端点的位置。不断缩小满足条件的连续子数组的长度,可能听起来很模糊,举个例子。

nums=[2,1,1,5,4,3]  s=5  
从0开始遍历(i=0) 求满足条件sum>=5的最小子数组长度
在2+1+1的时候sum<=5  不满足条件  此时i=2
当i=3时,sum(9)>=5  得出length=4 此时当然不是最小的连续子数组
所以此时向右移动一位 并把总和减去当前的值 $num -=$nums[$left] 
此时 $num=7>=5 继续移动.....直到移动。。直到发现5的位置一个子数组就满足条件

     
    class Solution {

    /**
     * @param Integer $s
     * @param Integer[] $nums
     * @return Integer
     */
    function minSubArrayLen($s, $nums) {
        $res=PHP_INT_MAX;
        $left=0;
        
        for($i=0;$i<count($nums);$i++){
            $sum +=$nums[$i];
            while($sum>=$s){
                $res=min($res,$i+1-$left);
                $sum -=$nums[$left++];
            }
        }
        return $res !=PHP_INT_MAX?$res:0;
    }
}

联系