leetcode踩坑记:长度最小的子数组

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

原题目:https://leetcode-cn.com/explo...

正确方法一:
//双指针查找法 O(nlogn)(对数阶)
var minSubArrayLen = function(s, nums) {

    var arr = [];//装载临时数组
    var minLen = 0; //最小的长度 初始为0
    var arrSum = 0; //累加
    var left = 0;
    var right = 1;
    
    while(left= s){
           if(left == 0 || (right - left < minLen)){ 
                minLen = arr.length; // 首次记录符合条件的  或者是此后对比下来比已记载的长度小 则重新赋值minLen
           } 
           ++left; //当前已经符合条件了 左侧滑动  
        }else{
            ++right; //不符合条件,右侧滑动加个数 
       }
    }
    return minLen;
};

以下还有两个错误方法的记载 记录下

错误方法一:
没读好题,以为是找到两者之和大于target最短的长度; \*\*看漏了连续这个字眼\*\*!!!
var minSubArrayLen = function(s, nums) {
    nums.sort(function(a,b){return b-a});
    var arr = [];
    console.log(nums);
    for(var i = 0;i= s){
            return arr.length;
        }
    }
    return 0;
};

minSubArrayLen(213,\[12,28,83,4,25,26,25,2,25,25,25,12]);
//没看好 题目 还一直在蒙圈 明明我输出是7; 但是答案一直是8 迷糊中;
半正确方法二:
// 可以运行 但是 时间复杂度为 T(n) = O(n2) ; 性能低 数据过大时不行

var minSubArrayLen = function(s, nums) {
    var arr = \[\];//装载临时数组
    var minLen = 0; //最小的长度
    var arrSum = 0; //累加
    for(let i = 0; i= s && (!minLen || (minLen > arr.length) )){
                minLen = arr.length;
            }
            ++j;
        }
    }
    return minLen;
};

//力扣的验证是丧心病狂的 一大堆数据跑到我浏览器都卡住了
//最后就是基于这版的改

资料:(这个文章说真的简明易懂清晰 )
十分钟弄懂:数据结构与算法之美 - 时间和空间复杂度

mark一下 仅供参考 欢迎更正补充 end

你可能感兴趣的:(leetcode,双指针,数组,javascript,时间复杂度)