我爱学算法之——滑动窗口攻克子数组和子串难题(上)

我爱学算法之——滑动窗口攻克子数组和子串难题(上)
现在来学习"滑动窗口"这一算法思想。

至于什么是"滑动窗口"呢?简单来说就是同向双指针;现在来通过题目来了解什么是"滑动窗口"

一、长度最小的子数组

题目链接:长度最小的子数组

题目解析

在这里插入图片描述

先来看题目,给了一个数组nums和一个整数target,让我们找到nums的一个满足条件(条件:子数组的和大于target)的最长子数组。

算法思路

首先第一次看到子数组/子串问题的算法题,能想到的思路就肯定是暴力枚举了;现在就先来看暴力枚举如何解决的。

暴力枚举

我们依次枚举整个数组的每一个子数组,并判断是否满足条件;满足条件且长度小于最总结果,就更新最终结果。

上面意思呢?

在这里插入图片描述

暴力解法的大致思路如上述所示;现在来看一下暴力枚举有哪些操作是不必要的

right第一次找到满足条件的位置并更新结果后,left++rightleft位置再重新遍历

这个操作感觉有些多余了,因为我们right遍历时第一次遇到满足条件的就停了下来;

如果rightleft++后的位置开始再遍历到上次满足条件位置的位置,这一个遍历过程很多余;

什么意思呢?

就以暴力枚举中的示例来说:

right第一次遍历到下标为3位置恰好满足条件;此时区间是[0,3],我们更新结果之后,left++

right
从下标为1的位置开始再次遍历;

我们直到[0,3]区间刚满足条件,那区间[1,1][1,2]是一定不满足条件的[1,3]才有可能满足条件。

那这样我们就可以想办法省略这个不必要的步骤:

找到满足条件的区间,并更新结果并lef++后,如何去解决right重新遍历的问题?

解决问题,我们要找到问题的本质

**暴力枚举**中为什么要重新进行遍历,本质问题就是我们不知道left++后,区间[left,right]的和;(所以暴力枚举才会进行重新遍历)

那我们现在定义一个变量sum来实时记录区间[left,right]的和,这样不就不需要重新遍历了吗。

我们只需要在right向后遍历和left更新时,顺手更新一下sum的值就可以了。

滑动窗口

其实滑动窗口就是优化了暴力枚举解法中不必要的部分

知道了如何去解决暴力枚举中不必要的问题,现在来实现

在这里插入图片描述

通过上图所示推到,我们的想法是可行的,现在来看整体的一个思路

滑动窗口,为什么称为滑动窗口?

就是rightleft在遍历更新的过程中维护了一段区间[left , right],这个区间像窗口一样在数组中滑动。

现在来看实现这个问题的一个整体思路:

进窗口:让right向右遍历,更新区间[left , right]的和sum;称为进窗口(就是让right遍历到的元素进入(窗口)区间内。出窗口:如果当前区间满足条件(区间大于target),就更新结果,然后让left++,并更新区间[left , right]的和;重复上述操作直到区间不满足条件。更新结果:至于什么时候更新结果,每一道题都不一样,根据题目中的要求再决定什么时候更新结果。

代码实现

classSolution{ public:intminSubArrayLen(int target

Read more

将现有 REST API 转换为 MCP Server工具 -higress

将现有 REST API 转换为 MCP Server工具 -higress

Higress 是一款云原生 API 网关,集成了流量网关、微服务网关、安全网关和 AI 网关的功能。 它基于 Istio 和 Envoy 开发,支持使用 Go/Rust/JS 等语言编写 Wasm 插件。 提供了数十个通用插件和开箱即用的控制台。 Higress AI 网关支持多种 AI 服务提供商,如 OpenAI、DeepSeek、通义千问等,并具备令牌限流、消费者鉴权、WAF 防护、语义缓存等功能。 MCP Server 插件配置 higress 功能说明 * mcp-server 插件基于 Model Context Protocol (MCP),专为 AI 助手设计,

By Ne0inhk
MCP 工具速成:npx vs. uvx 全流程安装指南

MCP 工具速成:npx vs. uvx 全流程安装指南

在现代 AI 开发中,Model Context Protocol(MCP)允许通过外部进程扩展模型能力,而 npx(Node.js 生态)和 uvx(Python 生态)则是两种即装即用的客户端工具,帮助你快速下载并运行 MCP 服务器或工具包,无需全局安装。本文将从原理和对比入手,提供面向 Windows、macOS、Linux 的详细安装、验证及使用示例,确保你能在本地或 CI/CD 流程中无缝集成 MCP 服务器。 1. 工具简介 1.1 npx(Node.js/npm) npx 是 npm CLI(≥v5.2.0)

By Ne0inhk
解锁Dify与MySQL的深度融合:MCP魔法开启数据新旅程

解锁Dify与MySQL的深度融合:MCP魔法开启数据新旅程

文章目录 * 解锁Dify与MySQL的深度融合:MCP魔法开启数据新旅程 * 引言:技术融合的奇妙开篇 * 认识主角:Dify、MCP 与 MySQL * (一)Dify:大语言模型应用开发利器 * (二)MCP:连接的桥梁 * (三)MySQL:经典数据库 * 准备工作:搭建融合舞台 * (一)环境搭建 * (二)安装与配置 Dify * (三)安装与配置 MySQL * 关键步骤:Dify 与 MySQL 的牵手过程 * (一)安装必要插件 * (二)配置 MCP SSE * (三)创建 Dify 工作流 * (四)配置 Agent 策略 * (五)搭建MCP

By Ne0inhk
如何在Cursor中使用MCP服务

如何在Cursor中使用MCP服务

前言 随着AI编程助手的普及,越来越多开发者选择在Cursor等智能IDE中进行高效开发。Cursor不仅支持代码补全、智能搜索,还能通过MCP(Multi-Cloud Platform)服务,轻松调用如高德地图API、数据库等多种外部服务,实现数据采集、处理和自动化办公。 本文以“北京一日游自动化攻略”为例,详细讲解如何在 Cursor 中使用 MCP 服务,完成数据采集、数据库操作、文件生成和前端页面展示的全流程。 学习视频:cursor中使用MCP服务 一、什么是MCP服务? MCP(Multi-Cloud Platform)是Cursor内置的多云服务接口,支持调用地图、数据库、文件系统等多种API。通过MCP,开发者无需手动写HTTP请求或繁琐配置,只需在对话中描述需求,AI助手即可自动调用相关服务,极大提升开发效率。 二、环境准备 2.1 cursor Cursor重置机器码-解决Too many free trials. 2.

By Ne0inhk