前端算法-最小的子数组的长度

简介: 前端算法-最小的子数组的长度

题目

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

输入:numCourses =2, prerequisites = [[1,0],[0,1]]
输出:false
解释:总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。

思路一

我们进入函数后先做判断,如果当前形参nums为null或者形参nums的长度为0或者形参target小于等于0,我们就直接返回0,否则我们就继续往下执行,往下执行我们新建result变量,默认值为Number的最大值,然后再新建三个变量,分别是sum变量,i变量和j变量,他们的初始值都默认为0,然后使用for循环进行循环形参nums,在for循环中我们在嵌套了一层while循环,循环条件为,当前j变量小于形参nums的长度且sum变量小于形参target时就进行循环,否则就终止循环,在while循环中我们将sum变量和当前形参nums的j变量位置值进行累加病重新赋值给sum变量,并且在让j变量进行自增1,然后进行判断如果sum变量大于等于形参target则将result变量值更新为result变量和j- i中的最小值,然后再将sum变量和当前nums形参i变量位置值相减,并重新赋值给sum变量,最后我们判断当前result变量是不是Number中的最大值,如果是相等那么就返回0,如果不是则将result变量返回出去即可

/**
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function(target, nums) {
    if (nums == null || nums.length === 0 || target <= 0) {
        return 0
    }
    let result = Number.MAX_VALUE
    let sum = 0
    let i = 0
    let j = 0
    for (i = 0; i < nums.length; i++) {
        while (j < nums.length && sum < target) {
            sum += nums[j]
            j++
        }
        if (sum >= target) {
            result = Math.min(result, j - i)
        }
        sum -= nums[i]
    }
    return result === Number.MAX_VALUE ? 0 : result
};


相关文章
|
5天前
|
前端开发 算法
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
sass 公用10个mixins代码块,算法太TM重要了,前端开发要求
|
6天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
15 1
|
6天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
14 0
|
6天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
13 0
|
5天前
|
缓存 算法 前端开发
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
|
6天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
11 1
|
6天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
7 1
|
6天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
12 1
|
6天前
|
算法 前端开发 搜索推荐
前端算法之希尔排序
前端算法之希尔排序
4 0
|
6天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
12 0