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

滑动窗口例题

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

209:长度最小的子数组

思路:1、暴力解法:两层for循环遍历,当sum >= target时计算子数组长度并与result比较,取最小的更新result。提交但是超出了时间限制。

class Solution {public int minSubArrayLen(int target, int[] nums) {int result = Integer.MAX_VALUE;int sum = 0;for (int i = 0; i < nums.length; i++) {sum = 0;for (int j = i; j < nums.length; j++) {sum += nums[j];if (sum >= target) {result = Math.min(j-i+1, result);break;}}}return result == Integer.MAX_VALUE ? 0 : result;}
}

        2、滑动窗口:所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。

        只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。滑动窗口也可以理解为双指针法的一种!只不过这种解法更像是一个窗口的移动,所以叫做滑动窗口更适合一些。

        for循环滑动窗口的终止位置,不断更新窗口的起始位置,因为窗口里面有多个符合大于target的窗口,比如第一个元素如果是负数,去掉之后还是大于target,所以循环里面的判断条件使用while而不使用if。

        不要以为for里放一个while就以为是O(n^2), 主要是看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。

class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0;int sum = 0;int result = Integer.MAX_VALUE;for (int right = 0; right < nums.length; right++) {sum += nums[right];while (sum >= target) {result = Math.min(right-left+1, result);sum -= nums[left++];//这里体现滑动窗口的精髓,不断变更i(子序列的起始位置)}}return result == Integer.MAX_VALUE ? 0 : result;}
}

二、904.水果成篮

力扣

也是滑动窗口的题目。

class Solution {public int totalFruit(int[] fruits) {// 我们发现形成窗口大小其实是固定的(两个篮子==果子种类)// 键为果子类型,值为果子数量Map<Integer, Integer> map=new HashMap<>();int left = 0;int result = 0;for(int right = 0; right < fruits.length; right++) {map.put(fruits[right], map.getOrDefault(fruits[right], 0) + 1);// 窗口果子种类超过两种果子了,广快弄掉一个种类的果子while(map.size() > 2){map.put(fruits[left], map.get(fruits[left]) - 1);if(map.get(fruits[left]) == 0){map.remove(fruits[left]);}left++;}result = Math.max(result, right - left + 1);}return result;}
}

三、无重复的最长字串

无重复字符的最长子串icon-default.png?t=N7T8https://leetcode.cn/problems/longest-substring-without-repeating-characters/

class Solution {public int lengthOfLongestSubstring(String s) {int len = s.length();int res = 0;int left = 0;Map<Character,Integer> map = new HashMap<>();for(int right = 0; right < len; right++) {if(map.containsKey(s.charAt(right))) {left = Math.max(left, map.get(s.charAt(right)) + 1);res = Math.max(res, right - left + 1);}map.put(s.charAt(right), right);}return res;}
}

相关文章:

滑动窗口例题

一、209:长度最小的子数组 209:长度最小的子数组 思路&#xff1a;1、暴力解法&#xff1a;两层for循环遍历&#xff0c;当sum > target时计算子数组长度并与result比较&#xff0c;取最小的更新result。提交但是超出了时间限制。 class Solution {public int minSubArray…...

智过网:注册安全工程师注册有效期与周期解析

在职业领域&#xff0c;各种专业资格认证不仅是对从业者专业能力的认可&#xff0c;也是保障行业安全、规范发展的重要手段。其中&#xff0c;注册安全工程师证书在安全生产领域具有举足轻重的地位。那么&#xff0c;注册安全工程师的注册有效期是多久呢&#xff1f;又是几年一…...

腐蚀Rust 服务端搭建架设个人社区服务器Windows教程

腐蚀Rust 服务端搭建架设个人社区服务器Windows教程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师也是游戏热爱者。最近在steam发现rust腐蚀自建的服务器以及玩家还是非常多的&#xff0c;那么作为服务器供应商对这商机肯定是不会放过的哈哈哈&#xff01; 艾西这…...

蓝桥杯备赛:考前注意事项

考前注意事项 1、DevCpp添加c11支持 点击 工具 - 编译选项 中添加&#xff1a; -stdc112、万能头文件 #include <bits/stdc.h>万能头文件的缺陷&#xff1a;y1 变量 在<cmath>中用过了y1变量。 #include <bits/stdc.h> using namespace std;// 错误示例 …...

111111111111

111111111111...

uniapp 卡片勾选

前言 公司的app项目使用的uniapp&#xff0c;项目里有一个可勾选的卡片功能&#xff0c;效果图如下&#xff1a; 找了一圈没找到什么太好的组件&#xff0c;于是就自己简单写了一个&#xff0c;记录一下。避免以后还会用到 代码 <template><view class"card-…...

乐趣Python——文件与数据:挥别乱糟糟的桌面

各位朋友们&#xff0c;今天我们要开启一场非凡的冒险——进入文件操作的世界&#xff01;你知道吗&#xff0c;在你的电脑里&#xff0c;有一个叫做“文件系统”的迷宫&#xff0c;里面藏着各种各样的文件和文件夹&#xff0c;它们就像是迷宫中的宝藏。但有时候&#xff0c;这…...

docker nginx-lua发送post json 请求

环境准备 dockerfile from fabiocicerchia/nginx-lua:1.25.3-ubuntu22.04 run apt-get -qq update && apt-get -qq install luarocks run luarocks install lua-cjson run luarocks install lua-iconv run luarocks install lua-resty-http后台代理服务准备&#xff…...

阿里面试总结 一

写了这些还是不够完整&#xff0c;阿里 字节 卷进去加班&#xff01;奥利给 ThreadLocal 线程变量存放在当前线程变量中&#xff0c;线程上下文中&#xff0c;set将变量添加到threadLocals变量中 Thread类中定义了两个ThreadLocalMap类型变量threadLocals、inheritableThrea…...

多线程(49)定义无锁、阻塞、非阻塞和无等待算法

在并发编程中&#xff0c;理解不同的同步策略——无锁&#xff08;Lock-Free&#xff09;、阻塞&#xff08;Blocking&#xff09;、非阻塞&#xff08;Non-Blocking&#xff09;、无等待&#xff08;Wait-Free&#xff09;——对于设计高效、健壮的多线程应用至关重要。让我们…...

(一)ffmpeg 入门基础知识

一、ffmpeg FFmpeg是一套强大的开源音视频处理工具&#xff0c;能够录制、转换以及流化音视频内容。 FFmpeg是开源的&#xff0c;这意味着它的源代码是公开的&#xff0c;允许任何人使用、修改和分发。它提供了录制、转换以及流化音视频的完整解决方案&#xff0c;支持多种格…...

【软件测试】个人博客系统测试

个人博客系统测试 一、项目背景1.1 技术背景1.2 功能背景 二、 测试用例编写三、自动化测试3.1 什么是自动化测试3.2 通过使用selenium进行自动化测试的编写&#xff08;Java实现&#xff09;3.3 编写测试用例&#xff0c;执行自动化测试3.3.1 输入用户名:test,密码:123&#x…...

20240410解决OK3588-C的核心板刷机之后无法启动的问题

20240410解决OK3588-C的核心板刷机之后无法启动的问题 2024/4/10 19:38 1、编译OK3588的LINUX/Buildroot&#xff1f;forlinxubuntu: ~/3588/OK3588_Linux_fs$ sudo ./build.sh BoardConfig-linuxfs-ok3588.mk 2、进行全编译 forlinxubuntu: ~/3588/OK3588_Linux_fs$ sudo ./bu…...

仅需三步就能成为大语言模型Prompt Engineer提示词工程大神

AI Prompt Engineer(提示词工程)是当下GenAI行业最热门的话题&#xff0c;它是利用有效的AI模型交互提示技术&#xff0c;引导大语言模型生成更高质量、更准确、更相关的回应。相对于预训练和微调&#xff0c;提示词工程不需要标注数据和训练模型&#xff0c;极大的节约了时间和…...

RuleEngine规则引擎底层改造AviatorScript 之公式规则

前情提要&#xff0c;看上一个文章&#xff0c;具体要实现的效果就是 当然上来的问题就是前端的问题&#xff0c;这个框首先他们用的是富文本&#xff0c;富文本传到后台的结果是前端脚本&#xff0c;带着h5的标签&#xff0c;后面改成了这个&#xff0c;当时这个东西其实和后…...

Vue项目(H5)与微信小程序来回跳转

新建H5页面 在小程序里面新建一个名为H5的文件夹&#xff0c;以及H5页面 H5.WXML <web-view src"{{h5Url}}" bindmessage"handleGetMessage"></web-view>H5.JSdata: { h5Url:https://xxx.com/login 要跳转的H5页面},H5回来的回调方法handleG…...

设计模式-单一职责原则

基本介绍 对类来说的&#xff0c;即一个类应该只负责一项职责。如类A负责两个不同的职责&#xff0c;职责1&#xff0c;职责2.当职责1需求变更而改变A时&#xff0c;可能造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1&#xff0c;A2 应用实例 方案1 public cl…...

vue和nunjucks的变量插值的形式{{}}冲突

Nunjucks 中修改配置 const nunjucks require(nunjucks);const template_old nunjucks.renderString(template_old: Hello, {{name}}!, { name: World }); console.log(template_old); // 配置 Nunjucks 环境 nunjucks.configure({tags: {variableStart: $(, // 设置变量起始…...

多语言婚恋交友APP开发流程一览

近年来&#xff0c;随着全球化的发展和人们对跨文化交流的需求增加&#xff0c;多语言婚恋交友APP的需求逐渐增长。开发这类APP需要考虑到不同语言和文化下用户的需求&#xff0c;涉及到一系列独特的流程和挑战。本文将从专家角度为您解析多语言婚恋交友APP的开发流程&#xff…...

RUM 最佳实践-交互延迟的探索与发现

FID 在互联网高速发展的时代&#xff0c;用户体验已成为企业竞争的关键所在。网页性能作为用户体验的重要组成部分&#xff0c;直接影响着用户的满意度和工作效率。First Input Delay&#xff08;FID&#xff09;作为衡量网页性能的重要指标&#xff0c;越来越受到业界关注。今…...

RWKV7-1.5B-g1a开源大模型落地:无需高端A100,RTX4090即可跑满多语言生成能力

RWKV7-1.5B-g1a开源大模型落地&#xff1a;无需高端A100&#xff0c;RTX4090即可跑满多语言生成能力 1. 模型简介 rwkv7-1.5B-g1a 是基于新一代 RWKV-7 架构的开源多语言文本生成模型&#xff0c;专为实际应用场景优化。这个1.5B参数的模型在保持出色生成能力的同时&#xff0…...

避坑指南:Dify知识库数据清洗的5个常见错误与正则表达式优化技巧

避坑指南&#xff1a;Dify知识库数据清洗的5个常见错误与正则表达式优化技巧 在企业级知识库构建过程中&#xff0c;数据清洗环节往往成为影响LLM问答质量的关键瓶颈。许多团队投入大量资源进行知识库建设后&#xff0c;仍面临"清洗了数据但召回率低"的困境。本文将揭…...

零基础手写大模型

从零搭建大模型&#xff1a;零基础学习实现职业经济跃迁指南 引言 在人工智能重塑全球产业格局的今天&#xff0c;“大模型”已不再仅仅是科技巨头的专利&#xff0c;而是成为了数字经济时代新的“电力”与“石油”。对于广大职场人士、创业者及寻求转型的个体而言&#xff0…...

OpenClaw终端增强:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF实现命令行智能补全与解释

OpenClaw终端增强&#xff1a;Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF实现命令行智能补全与解释 1. 为什么需要智能终端助手 作为每天与终端打交道的开发者&#xff0c;我经常陷入这样的困境&#xff1a;面对复杂的docker compose命令需要反复查阅文档&#xf…...

C语言回调函数在TCP客户端中的实现与应用

C语言回调函数在TCP客户端中的实现与应用1. 回调函数基础概念回调函数是一种通过函数指针实现的编程机制&#xff0c;允许将一个函数作为参数传递给另一个函数。在C语言中&#xff0c;回调函数的实现完全依赖于函数指针&#xff0c;这与C、Python等现代语言中可能使用仿函数或匿…...

Kook Zimage真实幻想Turbo部署教程:OpenStack私有云中幻想图生成服务弹性伸缩方案

Kook Zimage真实幻想Turbo部署教程&#xff1a;OpenStack私有云中幻想图生成服务弹性伸缩方案 1. 项目概述 Kook Zimage真实幻想Turbo是一款专为个人GPU环境优化的幻想风格文生图系统。基于Z-Image-Turbo极速推理架构&#xff0c;通过深度整合专属幻想模型权重&#xff0c;实…...

永磁同步电机双矢量模型预测电流MPCC控制仿真:传统与现代控制策略的对比分析

永磁同步电机双矢量模型预测电流MPCC控制仿真【参考文献】 &#xff08;1&#xff09;参考文献&#xff1a;《永磁同步电机鲁棒双矢量模型预测电流控制_郭鑫》 &#xff08;2&#xff09;描述&#xff1a;传统单矢量预测电流控制在单个控制周期内只能输出单个电压矢量&#xff…...

微软服软!被骂5年的Win11将被“整改”:告别强制更新、减少Copilot、任务栏摆放自由

整理 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;Windows 11 自 2021 年发布以来&#xff0c;因任务栏功能缩水、UI 不统一、强制网络登录以及更高的硬件门槛&#xff0c;成为用户集中吐槽的焦点。再加上近来微软猛推 AI 功能&#xff0c;Copilot 的入口…...

LIN总线测试避坑指南:为什么你的校验和测试总通不过?从经典型到增强型的实战解析

LIN总线校验和测试全攻略&#xff1a;从算法原理到故障排查的深度实践 在汽车电子系统的开发与测试中&#xff0c;LIN总线作为CAN总线的补充&#xff0c;广泛应用于车门模块、座椅控制、空调系统等对带宽要求不高的场景。而校验和作为LIN报文数据完整性的重要保障&#xff0c;其…...

Unity游戏开发:A*寻路算法实战,5步搞定NPC智能移动(附完整Demo)

Unity游戏开发&#xff1a;A*寻路算法实战指南与高级优化技巧 在游戏开发中&#xff0c;NPC的智能移动一直是开发者需要解决的核心问题之一。想象一下&#xff0c;当玩家在《魔兽世界》中穿越荆棘谷时&#xff0c;那些巡逻的巨魔守卫是如何绕过树木和山丘找到最短路径的&#x…...