算法题型:滑动窗口(leetcode 209)

2023-05-16

一、209. 长度最小的子数组

难度中等

题目描述

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

示例: 

输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。

 分析:采用滑动窗口,i,j分别表示左边界和右边界,sto用来存储i-j之间数值的和,res用来存储j-i。

最外层循环判定循环结束,即左侧边界到达倒数第二个位置(因为默认j一定在i的右边)

当sto<s&&j<len的时候右边界右移,否则(j到达最右边,或者sto>=s)移动左边界

res则不停的判断是否有更小的距离,前提条件都是:

if(sto>=s){
       res=Math.min(res,j-i);
 }

class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int len=nums.length;
        if(len==0)return 0;
        int i=0;
        int j=1;
        int res=len+1;
        int sto=nums[0];//用于存储当前添加值
        while(i<len-1){
            if(sto<s&&j<len){
                sto+=nums[j];
                j++;
            }
            else {
                if(sto>=s){
                res=Math.min(res,j-i);
                }
                i++;
                sto-=nums[i-1];
            }   
        }
        if(res==len+1)res=0;
        return res;
    }
}

二、剑指offer(63) 滑动窗口的最大值

1.题目描述

给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。
例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,
他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:
 {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1},
  {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。

2.分析
 

我的解法:
1.设立两个用于比较的值,maxValue和maxIndex,指示当前用于比较的最大值以及他的下标
2.先对第一个滑动窗口进行比对,得出maxValue=4,maxIndex=2,并添加到ArrayList中
    {[2,3,4],2,6,2,5,1}
3.然后从index=3的位置逐步往后比较maxValue的值,遇到更大的就替换maxValue和maxIndex为新的值
    {2,3,[4,2,6],2,5,1},如第三个滑动窗口,maxValue替换为6,maxIndex替换为4
    依此类推......
4.这个过程可能会遇到,超出当前maxValue的比对范围的情况,
    如:{2,3,4,2,6,[2,5,1]}
    maxValue=6,maxIndex=4,但是现在已经到"1"所在的位置,超出了窗口范围
    因此采用一层循环,从"2"~"5"之间,重新设定maxVlue和maxIndex
5.从头遍历到尾,每次循环将maxValue添加到ArrayList中。(要注意边界条件 size<=0||len<=0||size>len)
 

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size)
    {
        ArrayList<Integer> memo = new ArrayList<>();
        int len = num.length;
        //牛客网几乎所有不符合条件的都是返回空,务必要注意
        if(size<=0||len<=0||size>len)return memo;
        int maxValue = Integer.MIN_VALUE;
        int maxIndex = -1;
        for(int i=0;i<size;i++){
            if(i<len&&num[i]>maxValue){
                maxValue = num[i];
                maxIndex = i;
            }
        }
        //可以判断,如果size<=0,保证memo为null
        if(maxIndex!=-1){
            memo.add(maxValue);
        }

        for(int i=size;i<len;i++){
            //如果超出前面最大值的比较范围,则需要重新设定
            //以下循环,判断到i之前的一个最大值
            if(i-maxIndex>=size){
                int j = i-size+1;
                maxValue = num[j];
                while(j<i){
                    if(num[j]>maxValue){
                        maxValue = num[j];
                        maxIndex = j ;
                    }
                    j++;
                }
            }
            if(num[i]>maxValue){
                maxValue = num[i];
                maxIndex = i;
            }
            memo.add(maxValue);
        }
        return memo;
    }
}

其他解法:

待补充!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法题型:滑动窗口(leetcode 209) 的相关文章

  • 【ROS&GAZEBO】解决“is neither a launch file in package ”的问题

    这两天有小伙伴问到在安装完rotors后出现如下问题 xff1a 这个问题其实是ros环境没有配置好 xff0c 运行下面的命令 xff0c 将catkub ws加入ros的工作空间 span class token function mk
  • 【ROS&GAZEBO】多旋翼无人机仿真(七)——四元数姿态控制

    ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08 二 xff09 基于rotors的仿真 ROS amp GAZEBO 多旋翼无人机仿真 x
  • 【DRONECAN】(一)介绍

    DRONECAN 前言 笔者最近因为项目需要用到CAN通信 xff0c 所以研究了一下飞控上基于CAN的协议 xff0c 目前在Ardupilot和PX4中用的是DRONECAN xff0c DRONECAN是基于CAN的通信协议 xff0
  • 普通人对AI的看法

    就发展前景来看 xff0c 人工智能无疑将是现阶段与今后很长时间内的全球性热点 这是一个可以预见性的历史潮流 xff0c 无可阻挡 xff0c 一旦它出现一定会对现代互联网的结构会产 生颠覆性的改变 它将重新定义现代互联网的理念 xff0c
  • java+postgis实现根据两点生成模拟轨迹gps数据

    java 43 postgis实现根据两点生成模拟轨迹gps数据 文章目录 java 43 postgis实现根据两点生成模拟轨迹gps数据前言一 实现流程1 请求参数2 功能流程3 postgis重要使用函数介绍4 生成的GPS模拟轨迹点
  • Docker更新springboot容器镜像

    下载安装partainer 拉取镜像 docker pull portainer portainer ce 运行容器 docker run d p 9000 9000 v var run docker sock var run docker
  • AUTOSAR简介

    1 简介 AUTOSAR全称为 AUTomotive Open System ARchitecture xff0c 译为 汽车开放系统体系结构 xff1b AUTOSAR是一家由汽车电子 半导体和软件行业的汽车制造商 供应商 服务提供商等公
  • 基于sklearn的分类与回归基础总结

    一 分类 一 数据类型 1 python自带类型 span class token builtin list span span class token comment 列表 span span class token builtin tu
  • 回归模型 Boston房价预测

    一 加载数据集 将取值范围差异很大的数据输入到神经网络中 xff0c 这是有问题的 网络可能会自动适应这种取值范围不同的数据 xff0c 但学习肯定变得更加困难 对于这种数据 xff0c 普遍采用的最佳实践是对每个特征做标准化 xff0c
  • 卷积神经网络 猫狗识别

    一 卷积神经网络搭建 搭建框架 xff0c 需要使用卷积层和池化层 span class token keyword from span keras span class token keyword import span models s
  • Matlab学习笔记

    PART 0 xff1a 绪论 2018年9月11日 16 54 参考书籍 理论教程 MATLAB与计算方法 谢进 xff0c 李大美主编 武汉大学出版社 图书馆编号TP312MAX321 实践教程 MATLAB基础与运用 熊庆如主编 机械
  • 预训练卷积神经网络

    一 综述 预训练网络 xff08 pretrained network xff09 是一个保存好的网络 xff0c 之前已在大型数据集 xff08 通常是大规模图像分类任务 xff09 上训练好 如果这个原始数据集足够大且足够通用 xff0
  • 图片操作汇总

    1 keras preprocessing自带的图片处理器image xff0c 和tensorflow PIL中Image xff0c 返回的是同一种Image类型 span class token keyword from span k
  • 2020-10-22

    SSD Keras code解析 一 模型建立 1 1 重要标志参数 aspect ratios per layer span class token operator 61 span span class token punctuatio
  • 【无标题】

    沛公 xff08 刘邦 xff09 的军队驻扎在霸上 xff0c 没有能跟项羽相见 刘邦的左司马曹无伤就派人去告诉项羽说 xff1a 刘邦想占领关中称王 xff0c 让子婴做 xff08 他的 xff09 国相 xff0c xff08 相所
  • UORB

    uORB Micro Object Request Broker 微对象请求代理器 是PX4 Pixhawk系统中非常重要且关键的一个模块 xff0c 它肩负了整个系统的数据传输任务 xff0c 所有的传感器数据 GPS PPM信号等都要从
  • FreeRTOS - STM32中任务未进行调度问题

    将FreeRTOS源码移植到STM32F10X中 xff0c 编译通过 xff0c 烧录后 xff0c 发现开启的新任务没有运行 现象 xff1a 串口值仅仅打印了 printf 34 TesetesettettttttttttesT r
  • 使用TensorFlow Lite 部署自定义对象检测模型

    使用TensorFlow Lite 部署自定义对象检测模型 1 2022 03 05 文章目录 使用TensorFlow Lite 部署自定义对象检测模型 1 一 訓練自定義模型 4 1 收集數據2 訓練模型 二 集成TFLite模型的步驟
  • 使用docker安裝GPU版pytorch

    1 在docker pytorch 網址找到自己需要的環境 網址 https hub docker com r pytorch pytorch tags 点击复制 devel 版 连接 此处以 docker pull pytorch pyt
  • docker ssh连接

    docker ssh连接 1 进入docker span class token function passwd span span class token comment add root passward 记住自己设置的密码 xff0c

随机推荐

  • Docker容器显示图形到宿主机屏幕

    Docker容器显示图形到宿主机屏幕 在 docker 内 span class token function apt span span class token function install span xorg span class
  • Franka环境配置——从源码安装libfranka和franka_ros

    Franka安装ROS功能包 xff0c 有以下两种安装方式 xff1a 二进制包安装从源码安装编译 二进制包安装只要在终端输入一行命令就行 xff0c 很方便 但是功能包全部安装在根目录 xff1a opt ros kinetic sha
  • MeshLab——计算点云法向量求三角网格

    MeshLab 原始 1 点云分割 点击1后选中要删除区域 xff0c 点击2删除即可得到如下 xff1a 2 画三角网格 求法向量 Filters gt Normal Curvatures and Orientation gt Compu
  • XRDP--远程桌面连接(支持ubuntu16.04,18.04,20.04,22.04)

    XRDP 远程桌面连接 支持ubuntu16 04 18 04 20 04 22 04 1 环境 被控端 ubuntu 16 04 22 04 远控端 windows 2 具体操作 1 xff09 查看本机ip 终端输入 ifconfig
  • Jetson nano 卡刷教程

    Jetson nano 卡刷教程 所需用的的软件资源操作步骤 所需用的的软件资源 1 镜像 jetson nano jp451 sd card image zip 可自己在官网下载 https developer nvidia com em
  • dockers移盘&挂载

    docker 目录移动到其他磁盘的操作 systemctl stop docker 停止dockersystemctl status docker 查看docker服务状态mv var lib docker media li 1d10567
  • window docker 教程

    window docker 教程 1 docker windows 安装2 Docker Windows 修改默认镜像文件位置2 1 更改Docker Desktop设定2 2 创建文件链接2 3重新启动docker即可 1 docker
  • python导出环境依赖(requirements.txt)

    pip list format span class token operator 61 span freeze span class token operator gt span requirement txt 即可在同级目录得到一个re
  • 000-搭建Gitea-自己的git服务器

    000 搭建Gitea 自己的git服务器 1 什么是gitea 官网的介绍是 xff1a Gitea的首要目标是创建一个极易安装 xff0c 运行非常快速 xff0c 安装和使用体验良好的自建 Git 服务 我们采用Go作为后端语言 xf
  • 动态规划、贪心算法、分治算法的优缺点分析

    动态规划模型相对于静态规划模型的优点 xff1a 1 能够得到全局最优解 xff1b 2 可以得到一族最优解 xff1b 3 由于动态规划方法反映了动态过程演变的联系和特征 xff0c 在计算时可以利用实际知识和经验提高求解效率 动态规划模
  • 如何在vscode上运行调试C++(最简单的方法)

    Visual Studio Code vscode同样是微软出品的 支持 看上面的vside介绍吧 就省略了 人称宇宙第一编辑器 作为编辑器 它几乎支持所有的语言 对应语言风格的高亮 自动缩进 代码纠错 代码提示和代码补全等 要是有相应的编
  • visual studio中,已经安装完成后如何再安装其他组件(即在安装过程中未勾选的)怎么办?

    方法一 xff1a 控制面板 gt 程序 程序和功能 右键visual studio 单击更改 下面有三个按钮 单击更改 xff0c 把需要安装的组件全钩 xff0c 然后点击更改即可 1 在win10界面左下角搜索 控制面板 2 寻找程序
  • 安装好git包后,但在vsc中却提示:“ 未找到 Git。请安装 Git,或在 “git.path“ 设置中配置“的解决处理办法

    解决步骤 1 在官网安装好git管理工具包后 新建一个文件夹 然后用vsc打开该文件夹 效果下图所示 2 点选上图右侧的齿轮按钮 管理功能 后选中 34 管理扩展 34 功能 3 进入新的界面如下图所示 点开管理扩展后我们会看到Git扩展
  • 一种 XML2XML 格式之间转换的解决方案(转)

    一种 XML2XML 格式之间转换的解决方案 本文提供了一种 XML2XML 格式之间转换的通用解决方案 我们通过建立用以存储数据信息的数据模型 xff0c 并应用优化器 Optimizers xff0c 转换规则 Rules 对所存储的信
  • Unity can't be installed on this disk.The contents of this disk can't be changed.

    1 问题 在使用mac下Unity的时候 xff0c 通常情况下我们的方法都是通过Hub的安装按钮下载 但是 xff0c 很多时候上面并没有我们需要的版本 于是我们傻乎乎的通过点击上面的 xff1a 官方发布网站 进行下载 在下载的第五个步
  • Unity之【使用Blend-Tree】

    Blended Tree 材料准备创建Animator创建Controller配置混合树脚本代码效果演示 材料准备 人物模型和动画 直接去Unity素材库里找 xff0c 动画可以找可以自己录制 Unity编辑器 创建Animator 步骤
  • linux常用开关机指令

    关机命令 xff1a shutdown h now xff08 立刻进行关机 xff09 halt xff08 立刻进行关机 xff09 poweroff xff08 立刻进行关机 xff09 重启命令 xff1a shutdown r n
  • _vimrc (linux版)

    一般放在 xff1a etc vim span class token string 34 vimrc 34 span span class token function vim span config span class token f
  • 01_Unity事件函数OnMouseDown生效条件

    前言 Unity提供了OnMouseDown xff0c OnMouseEnter xff0c OnMouseExit等方法 xff0c 这些方法可以很方便的帮助我们处理鼠标的时间响应 但是需要注意他的生效条件 xff0c 最近我在制作视频
  • 算法题型:滑动窗口(leetcode 209)

    一 209 长度最小的子数组 难度中等 题目描述 给定一个含有 n 个正整数的数组和一个正整数 s xff0c 找出该数组中满足其和 s 的长度最小的连续子数组 如果不存在符合条件的连续子数组 xff0c 返回 0 示例 输入 s 61 7