【js刷题:数据结构数组篇之长度最小的子数组】

一、题目

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

二、方法

1.暴力解法

双层for循环:

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int result = INT32_MAX; // 最终的结果
        int sum = 0; // 子序列的数值之和
        int subLength = 0; // 子序列的长度
        for (int i = 0; i < nums.size(); i++) { // 设置子序列起点为i
            sum = 0;
            for (int j = i; j < nums.size(); j++) { // 设置子序列终止位置为j
                sum += nums[j];
                if (sum >= s) { // 一旦发现子序列和超过了s,更新result
                    subLength = j - i + 1; // 取子序列的长度
                    result = result < subLength ? result : subLength;
                    break; // 因为我们是找符合条件最短的子序列,所以一旦符合条件就break
                }
            }
        }
        // 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列
        return result == INT32_MAX ? 0 : result;
    }
};

2.滑动窗口

是什么

就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果,这里也可以看作是双指针的一种方式,只是移动的方式更适合被称作为滑动窗口

滑动窗口的起始位置

起始位置会在当前窗口的值大于s后向前移动(缩小子序列的范围)

滑动窗口的结束位置

结束位置就是遍历数组的指针

代码展示

var minSubArrayLen = function(target, nums) {
    let start, end
    start = end = 0
    let sum = 0
    let len = nums.length
    //无限大
    let ans = Infinity
    
    while(end < len){
        sum += nums[end];
        while (sum >= target) {
            ans = Math.min(ans, end - start + 1);
            sum -= nums[start];
            start++;
        }
        end++;
    }
    return ans === Infinity ? 0 : ans
};

在这里插入图片描述

3.力扣刷题

水果成篮

题目

在这里插入图片描述
在这里插入图片描述

思路

这道题大概意思是,一共有两个篮子,要去采摘有着不同品种的数,但是每个篮子只能采摘一个品种,但采摘的个数没有限制,问最多能采摘多少个水果。
我们可以采用滑动窗口的方法解决,首先水果的品种(不同的数)只有两个,意思是数组中只能存在两个不同的数,那么我们可以定义一个代表水果种类的数组,存放水果的种类数
其次要求最多能采摘多少水果,即要确保滑动窗口的最大长度
而左窗口的移动条件为出现了一个新品种的数,要保证窗口内只有两个品种

代码

在这里插入图片描述

无重复字符的最长子串

在这里插入图片描述

相关推荐

  1. 「优选算法」:长度数组

    2024-04-01 14:42:04       49 阅读
  2. 209.长度数组

    2024-04-01 14:42:04       65 阅读
  3. 209. 长度数组

    2024-04-01 14:42:04       71 阅读
  4. 长度数组

    2024-04-01 14:42:04       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 14:42:04       106 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 14:42:04       116 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 14:42:04       95 阅读
  4. Python语言-面向对象

    2024-04-01 14:42:04       103 阅读

热门阅读

  1. static修饰的方法为什么不能被覆盖?

    2024-04-01 14:42:04       44 阅读
  2. leetcode93.复原IP地址

    2024-04-01 14:42:04       40 阅读
  3. npm 与 yarn 命令比较

    2024-04-01 14:42:04       42 阅读
  4. Spring与Spring Boot的区别

    2024-04-01 14:42:04       39 阅读
  5. 修改aws账户的密码和MFA

    2024-04-01 14:42:04       38 阅读
  6. 【力扣】374.猜数字大小

    2024-04-01 14:42:04       43 阅读
  7. RuoYi-Vue-Plus(登录流程)

    2024-04-01 14:42:04       39 阅读