长度最小的子数组(JS)

发布时间:2023-12-02 18:00

 题目: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

思想:利用滑动窗口的思想,先计算一段窗口内的数据和,如果满足条件再逐一减掉先前元素,直到不再符合条件,达到窗口不断往右滑的目的。最后返回的是长度最小的窗口长度。

        var minSubArrayLen = function(target, nums) {
            var sum = 0;
            var i = 0; //滑动窗口的起始位置
            var resLength = nums.length + 1; //先设置一个初始结果长度,反正总不可能超过总长度
            for (var j = 0; j < nums.length; j++) { //j来代表窗口的右端序列(窗口结尾)
                sum = sum + nums[j]; //先求出窗口内的数据和
                while (sum >= target) { //在和大于目标值的前提下进行
                    var subLength = j - i + 1; //滑动窗口的长度,即有几位数字
                    resLength = resLength < subLength ? resLength : subLength; //更新结果数组的长度
                    sum = sum - nums[i]; //先从左往右减掉一个值看看,即滑动窗口
                    i++; //i起到滑动的效果
                }
            }
            return resLength == nums.length + 1 ? 0 : resLength;
        };
        console.log(minSubArrayLen(4, [1, 4, 4]));

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号