当前位置: 首页 > news >正文

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

长度最小的子数组

  • 一、题目
  • 二、方法
    • 1.暴力解法
    • 2.滑动窗口
      • 是什么
      • 滑动窗口的起始位置
      • 滑动窗口的结束位置
      • 代码展示
    • 3.力扣刷题
      • 水果成篮
        • 题目
        • 思路
        • 代码

一、题目

给定一个含有 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++) { // 设置子序列起点为isum = 0;for (int j = i; j < nums.size(); j++) { // 设置子序列终止位置为jsum += nums[j];if (sum >= s) { // 一旦发现子序列和超过了s,更新resultsubLength = 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, endstart = end = 0let sum = 0let len = nums.length//无限大let ans = Infinitywhile(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.力扣刷题

水果成篮

题目

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

思路

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

代码

在这里插入图片描述

http://www.lryc.cn/news/328909.html

相关文章:

  • 大话设计模式之装饰模式
  • 国赛大纲解读
  • 设计模式(5):原型模式
  • 【React】vite + react 项目,进行配置 eslint
  • Windows入侵排查
  • C语言每日一题
  • TheMoon 恶意软件短时间感染 6,000 台华硕路由器以获取代理服务
  • 人脸68关键点与K210疲劳检测
  • 【跟着GPT4学JAVA】异常篇
  • Ubuntu上安装d4rl数据集
  • C++之STL整理(4)之set 用法(创建、赋值、增删查改)详解
  • IDEA MyBatisCodeHelper Pro最新版(持续更新)
  • sheng的学习笔记-AI-YOLO算法,目标检测
  • C# wpf 嵌入wpf控件
  • 云原生(六)、CICD - Jenkins快速入门
  • 基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400
  • 【JavaParser笔记02】JavaParser解析Java源代码中的类字段信息(javadoc注释、字段​​​​​​​名称)
  • Spring IoCDI(3)
  • 保研线性代数机器学习基础复习1
  • js绑定事件的方法
  • 是德科技keysight N9000B 信号分析仪
  • 软考 - 系统架构设计师 - 架构风格
  • CleanMyMac X2024专业免费的国产Mac笔记本清理软件
  • ES6 模块化操作
  • 统计XML文件内标签的种类和其数量及将xml格式转换为yolov5所需的txt格式
  • 《操作系统导论》第14章读书笔记:插叙:内存操作API
  • HAProxy + Vitess负载均衡
  • 2024年京东云主机租用价格_京东云服务器优惠价格表
  • qt-C++笔记之QSpinBox控件
  • Linux(CentOS)/Windows-C++ 云备份项目(服务器网络通信模块,业务处理模块设计,断点续传设计)