【代码随想录】LC 209. 长度最小的子数组

文章目录

  • 前言
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、知识风暴

前言

本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。

一、题目

1、原题链接

209. 长度最小的子数组

2、题目描述

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

二、解题报告

1、思路分析

  1. 暴力解法
    利用两层循环,第一层循环枚举子数组的起点位置,第二层循环枚举子数组的终点位置,第二层循环中可以同时来统计当前子数组的和,如果符合题目条件则更新length,否则继续循环,直至两层循环结束,返回题目要求的值,算法结束。
  2. 滑动窗口
    利用两个指针,i指向窗口起始位置j指向窗口的终止位置。初始时ij均指向数组中第一个元素,指针j不断向后遍历,当区间[i,j]中数组元素和大于等于target 时(只要满足这个条件就执行后面操作,即为while循环),根据当前子数组的长度来确定是否更新length向后移动i指针(原因:因为区间[i,j]中的元素和已经大于等于target,如果此时i指针不动,j指针继续向后遍历,之后的区间一定满足元素和大于等于target,但是数组长度一定不比当前[i,j]区间的长度短,即此时i指针不动,j向后遍历到的各个位置与i组成的区间[i,j]一定不是答案,所以此时已经没有必要让i再待在当前位置了,故需要移动i到下一个位置),直至j遍历完所有位置,返回题目要求的值,算法结束。

2、时间复杂度

暴力解法时间复杂度O(n^2)
滑动窗口时间复杂度O(n)

3、代码详解

暴力解法代码(TLE、力扣无法AC)

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {//将长度初始化为整型最大值int length = INT_MAX;for (int i = 0; i < nums.size(); i++) {int sum = 0;for (int j = i; j < nums.size(); j++) {sum += nums[j];//j-i+1表示当前满足条件的数组长度if (sum >= target && j - i + 1 < length) {length = j - i + 1;}}}//如果length没有被更新说明不存在符合条件的子数组return length == INT_MAX ? 0 : length;}
};

滑动窗口代码

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int length = INT_MAX;//nowLength记录当前符合条件的子数组长度int nowLength = 0;//sum记录当前子数组的元素之和int sum = 0;int i = 0;for (int j = 0; j < nums.size(); j++) {sum += nums[j];while (sum >= target) {nowLength = j - i + 1;length = length > nowLength ? nowLength : length;//窗口缩小:因为当前[i,j]之间已经是最优答案,没有再以i开头的区间比当前结果更优sum -= nums[i++];}}return length == INT_MAX ? 0 : length;}
};

三、知识风暴

  • INT_MAXINT32_MAX表示整型的最大值
  • 滑动窗口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128128.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python接口自动化测试 —— Selenium+pytest+数据驱动

主流自动化框架 selenium &#xff1a;web端自动化框架 &#xff0c;&#xff08;行业里面最核心的框架&#xff09; appium &#xff1a;手机app端框架 requests &#xff1a;接口测试 selenium 工具类封装 selenium提供了很多方法供我们去完成网页元素的操作&#xff0c; …

二、Excel VBA 简单使用

Excel VBA 从入门到出门一、Excel VBA 是个啥&#xff1f;二、Excel VBA 简单使用 &#x1f44b;Excel VBA 简单使用 ⚽️1. 如何在Excel中手动编写VBA代码⚽️2. 如何在 Excel 中运行 VBA 代码⚽️3. 如何在Excel中记录VBA代码⚽️4. 如何在Excel中编辑录制的VBA代码⚽️5. 如…

nginx-proxy反向代理缓存

介绍&#xff1a; 反向代理缓存&#xff0c;类似于动静分离&#xff0c;即通过nginx代理服务器根据客户端发送的url请求&#xff0c;去后台服务器获取数据&#xff0c;将静态数据缓存到nginx代理服务器上&#xff0c;并配置有过期时间&#xff0c;当客户端下次以相同的url请求…

屏幕分辨率:PC / 手机 屏幕常见分辨率,前端如何适配分辨率

一、常见的PC屏幕分辨率 序号水平像素点数和垂直像素点数也被称为常见显示器11366 768720p 或 HD Ready常见于笔记本电脑和低端桌面显示器21920 10801080p 或 Full HD / 全高清高端笔记本电脑和中高档台式机32560 14402K 分辨率常见于高端笔记本电脑和高端台式机43840 216…

基于SSM+Vue的订餐系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Spring Cloud父子容器及容器的启动源码

1.前言 接触过Spring Cloud都知道&#xff0c;服务启动的时候会先启动Spring Cloud容器加载bootstrap.yml的配置&#xff0c;然后再启动我们常说的Spring容器&#xff0c;那么为什么需要父子容器&#xff0c;父容器又是在什么地方进行创建的呢&#xff1f; 2. 为什么需要父子…

JS-前端在dom中预览pdf等文件

1、将pdf等文件显示到dom元素中预览 pdf文件可以是blob、url、file类型等只要使用URL.createObjectURL(file)全部转为URL即可使用无需借助任何插件&#xff0c;只需要使用<object></object>标签即可实现 1.1、html <template><div class"home"…

云原生Kubernetes:K8S集群kubectl命令汇总

目录 一、理论 1.概念 2. kubectl 帮助方法 3.kubectl 子命令使用分类 4.使用kubectl 命令的必要环境 5.kubectl 详细命令 一、理论 1.概念 kubectl是一个命令行工具&#xff0c;通过跟 K8S 集群的 API Server 通信&#xff0c;来执行集群的管理工作。 kubectl命令是操…

对于无法直接获取URL的数据爬虫

在爬学校安全教育题库的时候发现题库分页实际上执行了一段js代码&#xff0c;如下图所示 点击下一页时是执行了函数doPostBack&#xff0c;查看页面源码如下 点击下一页后这段js提交了一个表单&#xff0c;随后后端返回对应数据&#xff0c;一开始尝试分析获取对应两个参数&a…

CCF CSP认证 历年题目自练Day25

题目 试题编号&#xff1a; 201403-3 试题名称&#xff1a; 命令行选项 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间…

Unity基于种子与地块概率的开放世界2D地图生成

public class BuildingGen : MonoBehaviour {public int[] Building;//存储要生成的地块代码public int[] Probability;//存储概率public double seed;public int width 100;public int height 100;public float noiseScale 0.1f; //噪声缩放倍数private int[,] frequencyM…

axios的get请求时数组参数没有下标

开发新项目过程中 发现get请求时 数组参数没有下标 这样肯定是不行的 后端接口需要数组[0]: 7 数组[1]:4这样的数据 原因是因为在请求拦截器没有处理需要的参数 解决方法 在请求拦截器 处理一下参数 import axios, { AxiosError, AxiosInstance, AxiosRequestHeaders } fro…