滑动窗口如人生,回顾往事不复还———力扣刷题
第一题:长度最小的子数组
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路:
第一想法肯定时暴力枚举,枚举数组任何一个元素,把他当起始位置,然后从起始位置找最短区间,使得区间和大于等于目标值
利用两个嵌套for循环,如果符合条件就记录,然后更新结果,返回
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {// 记录结果int ret = INT_MAX;int n = nums.size();// 枚举出所有满⾜和⼤于等于 target 的⼦数组[start, end]// 由于是取到最⼩,因此枚举的过程中要尽量让数组的⻓度最⼩// 枚举开始位置for (int start = 0; start < n; start++){int sum = 0; // 记录从这个位置开始的连续数组的和// 寻找结束位置for (int end = start; end < n; end++){sum += nums[end]; // 将当前位置加上if (sum >= target) // 当这段区间内的和满⾜条件时{// 更新结果,start 开头的最短区间已经找到ret = min(ret, end - start + 1);break;}}}// 返回最后结果return ret == INT_MAX ? 0 : ret;}
};
由于都是正数因此,只要找到最短区间就不必往下继续查找,因为可能所有的数都不满足条件,因此这里可能返回0,并且保证所有数都可更新,初始化ret为INT_MAX;
法二:滑动窗口
先将右端元素划入窗口,然后统计窗口元素和,如果大于target,更新,并且把左端元素滑出,继续同时判断是否满足更新结果,因为滑出去之和依旧可能满足条件,如果窗口不满足right++,进入下一个窗口。
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n=nums.size(),sum=0,len=INT_MAX;for(int left=0,right=0;right<n;right++){sum+=nums[right];while(sum>=target){len=min(len,right-left+1);sum-=nums[left++];}}return len==INT_MAX?0:len;}
};
来自一个力扣大佬的形象解释:左右指针中间窗口的sum为两指针的“共同财产”,就是右指针一直在努力工作挣钱,好不容易共同财产大过target,记录一下两指针之间的距离,结果左指针就开始得瑟挥霍,不停花钱(往右移动),结果花钱一直花到sum又小过target,此时右指针不得不再次出来工作,不停向右移动,周而复始,最后取左右指针离得最近的时候
第二题:⽆重复字符的最⻓⼦串(medium)
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

法一依旧是暴力:
即先固定一个,然后遍历所有,创建个哈希表用来记录出现的次数,如果大于一则说明出现重复,那么就跳出当前循环,进入下一个固定的数进行遍历,否则就记录此刻长度
class Solution {
public:int lengthOfLongestSubstring(string s) {int ret = 0; // 记录结果int n = s.length();// 1. 枚举从不同位置开始的最⻓重复⼦串// 枚举起始位置for (int i = 0; i < n; i++){// 创建⼀个哈希表,统计频次int hash[128] = { 0 };// 寻找结束为⽌for (int j = i; j < n; j++){hash[s[j]]++; // 统计字符出现的频次if (hash[s[j]] > 1) // 如果出现重复的break;// 如果没有重复,就更新 retret = max(ret, j - i + 1);}}// 2. 返回结果return ret;}
};
法二:
例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!如何移动?我们只要把队列的左边的元素移出就行了,直到满足题目要求!一直维持这样的队列,找出队列出现最长的长度时候,求出解!
步骤就是右端ch元素进入时,用哈希表统计次数,如果超过1,则有重复,那么从左侧滑出窗口,直到ch次数变为1,然后更新。
如果没有超过1,说明没有重复,直接更新
class Solution {
public:int lengthOfLongestSubstring(string s){int hash[128]={0};int left=0,right=0,n=s.size();int ret=0;while(right<n){hash[s[right]]++;while(hash[s[right]]>1)//判断进入{hash[s[left++]]--;//出窗口,然后左边移动}ret = max(ret,right-left+1);right++;//}return ret;}
};
第三题:最大连续1的个数
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路:这题,
class Solution
{
public:int longestOnes(vector<int>& nums, int k){int ret = 0;for (int left = 0, right = 0, zero = 0; right < nums.size(); right++){if (nums[right] == 0) zero++; // 进窗⼝while (zero > k) // 判断if (nums[left++] == 0) zero--; // 出窗⼝ret = max(ret, right - left + 1); // 更新结果}return ret;}
}
相关文章:
滑动窗口如人生,回顾往事不复还———力扣刷题
第一题:长度最小的子数组 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路: 第一想法肯定时暴力枚举,枚举数组任何一个元素,把他当起始位置,然后从起始位置找最短区间,使得…...
VM实现方式及其优缺点
在众多VM实现方式中,我可以说几种常见的实现方式。例如,基于栈的方式、基于寄存器的方式、基于堆的方式等。下面我将分别对这几种方式进行阐述,并讨论它们各自的优点和缺点,以及它们各自的应用场景。 基于栈的方式 基于栈的方式…...
MySQL——库,表基础操作
目录 一.库的操作 1.显示当前的数据库列表 2.创建数据库 3.字符集和校验规则 4.操纵数据库 5.删除数据库 6.数据库备份与还原 7.查看连接情况 二.表的操作 1.创建表 2.查看表结构 3.修改表 4.删除表 一.库的操作 1.显示当前的数据库列表 show databases; 2.创建数…...
文件批量管理方法:100个文件要怎样快速放在100个指定的文件夹中
处理大量文件时,经常要将多个文件放入相应的文件夹中。如果要处理的文件数量较大,例如100个文件要放入100个指定的文件夹中,那么如何快速有效地完成这个任务呢?下面看下云炫文件管理批量管理文件的方法,快速将100个文件…...
管理的五大过程和十大知识领域
PMBOK五大过程组是什么? PMBOK五大过程组是:启动过程、规划过程、执行过程、监控过程、收尾过程。 各用一句话概括项目管理知识体系五大过程组: 1、启动过程组:作用是设定项目目标,让项目团队有事可做; 2、…...
C/C++ 快乐数: 编写一个算法来判断一个数n是不是快乐数
题目: 编写一个算法来判断一个数n是不是快乐数。 快乐数的定义: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过…...
【后端】JVM 远程调试
前言 再好的代码,也还是有瑕疵的,不是代码不给力,是线上问题太牛逼太玄幻。这不刚部署就出现了问题,幸好还是测试的时候,早点发现早点解决,不给任何人带来不必要的损失,是我做人的原则,只要钱到位,任何问题都不是问题。 JVM 远程调试 不得不说 IDEA 和 宝塔配合是真…...
Android Studio中配置Flutter插件,创建小项目“hello world”
文章目录 一、下载Flutter SDK二、Android studio中安装Flutter插件三、创建Flutter小项目 一、下载Flutter SDK 打开官网https://flutter.io/setup-windows/下载Flutter sdk并解压到一目录 二、Android studio中安装Flutter插件 Android studio中安装Flutter插件&#x…...
BabylonJS(一) 前言-为什么想写这个系列
先开篇吐槽下吧,我是奔着6.0和WebGPU来的,网上各种评测也很优秀,社区活跃,打算入坑。 但...... babylonjs中文资料相对于Threejs、Unity简直是太少了.. 之前有个中文站点,好像也没啥人维护了,大部分deep…...
论文阅读_反思模型_Reflexion
英文名称: Reflexion: Language Agents with Verbal Reinforcement Learning 中文名称: 反思:具有言语强化学习的语言智能体 文章: http://arxiv.org/abs/2303.11366 代码: https://github.com/noahshinn/reflexion 作者: Noah Shinn (Northeastern University) 日期…...
Redis 数据结构:高频面试题及解析
概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性&…...
蓝桥杯小白赛第一场(1~6)(期望DP)
1、模拟 2、贪心 3、前缀和 4、猜结论 5、双指针 6、期望DP(公式有问题已更改) 1. 蘑菇炸弹 思路:一个简单的暴力模拟。 #include <bits/stdc.h> using namespace std; int main() {int n;cin >> n;vector<int>a(n…...
房贷背后数学陷阱-蒙特卡洛算法Monte Carlo揭秘断供为何越来越多(硬核收藏)
前几天写了法拍房相关文章,发现国内断供的房屋越来越多。 中国法拍房数量统计预测模型_2023年法拍房数据竟是 2023年中国法拍房用户画像和数据分析 今早花了2个小时,写了蒙特卡洛算法模拟预测按揭贷款断供概率。 先给大家介绍按揭贷款的常用数据。不同…...
spingboot项目实战之若依框架创建新模块
前言 目前的脚手架系统很多,比较早接触诺依框架,以若依框架为参考如何创建新模块 步骤 1. 下载诺依框架,依照参考说明一步步,能做到系统运行起来。 2. 准备好mysql文件,创建新数据库表 3. 数据库管理工具navicat…...
智能优化算法应用:基于飞蛾扑火算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于飞蛾扑火算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于飞蛾扑火算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.飞蛾扑火算法4.实验参数设定5.算法结果6.…...
3分钟,掌握“曲面屏显示屏”
在3分钟内掌握“曲面屏显示屏”的概念和特点,可以按照以下步骤进行: 一、了解曲面屏显示屏的基本概念 曲面屏显示屏是一种采用柔性塑料的显示屏,主要通过OLED面板来实现。相比直面屏幕,曲面屏幕弹性更好,不易破碎。此外…...
光栅化渲染:光栅化算法实现
光栅化是将图元转换为二维图像的过程。 该图像的每个点都包含颜色和深度等信息。 因此,对图元进行光栅化由两部分组成。 第一个是确定窗口坐标中整数网格的哪些方格被图元占据。 第二个是为每个这样的方块分配颜色和深度值。 (OpenGL 规范) N…...
Python-Opencv图像处理的小坑
1.背景 最近在做一点图像处理的事情,在做处理时的cv2遇到一些小坑,希望大家遇到的相关的问题可以注意!! 2. cv2.imwrite保存图像 cv2.imwrite(filename, img, [params]) filename:需要写入的文件名,包括路…...
[LCTF 2018]bestphp‘s revenge
文章目录 前置知识call_user_func()函数session反序列化PHP原生类SoapClient 解题步骤 前置知识 call_user_func()函数 把第一个参数作为回调函数调用 eg:通过函数的方式回调 <?php function barber($type){echo "you wanted a $type haircut, no problem\n";}c…...
HTML中常用表单元素使用(详解!)
Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中常用表单元素使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 …...
嵌入式追踪路由器(ETR)内存数据解码实战指南
1. 嵌入式追踪路由器(ETR)内存数据解码实战指南在嵌入式系统调试中,获取处理器执行踪迹(trace)是诊断复杂问题的关键手段。CoreSight SoC-600架构中的Trace Memory Controller(TMC)通过Embedded Trace Router(ETR)组件,可以将ATB(Advanced Trace Bus)追踪…...
BFloat16指令集与矩阵乘法优化技术详解
1. BFloat16指令集概述BFloat16(Brain Floating Point 16)是Google Brain团队提出的一种16位浮点格式,专为深度学习应用优化。这种格式保留了与IEEE 754单精度浮点数(FP32)相同的8位指数位,但将尾数位从23位…...
这种界面和额外附加认证要求以前从来没有过
注册github账号很早就有了,但这种认证要求以前从来没有过。 自从上传了这个代码: mcp 桥接器 就多了认证要求。 发生了什么 :GitHub 现在要求所有活跃开发者都必须开启双重身份验证(2FA),以保护账号不被黑…...
ZYNQ启动太慢?从FSBL到U-Boot的完整性能分析与优化实战
ZYNQ启动太慢?从FSBL到U-Boot的完整性能分析与优化实战 在嵌入式系统开发中,启动时间往往是衡量产品性能的关键指标之一。对于基于Xilinx ZYNQ平台的产品,从按下电源键到系统完全就绪,这中间经历的毫秒级延迟可能决定着一个工业控…...
别再乱画了!GD32/STM32复位与唤醒按键电路设计,90%新手会踩的坑
GD32/STM32复位与唤醒按键电路设计避坑指南 1. 复位电路设计的核心误区与解决方案 许多工程师在设计GD32/STM32复位电路时,往往低估了RC时间常数的重要性。我曾亲眼见过一个团队花费两周时间排查系统随机重启问题,最终发现竟是复位电路中一个10kΩ电阻被…...
告别环境焦虑:用 Conda 在 Ubuntu 上轻松管理 JAX (CPU/GPU) 和 TensorFlow 的多个版本
告别环境焦虑:用 Conda 在 Ubuntu 上轻松管理 JAX (CPU/GPU) 和 TensorFlow 的多个版本 深度学习框架的版本冲突问题,一直是开发者心中的痛。你是否经历过这样的场景:昨天还能正常运行的 TensorFlow 项目,今天更新了 CUDA 驱动后就…...
【亲测免费】 为你的C Winform项目增添亮色:C Winform图标资源库推荐
为你的C# Winform项目增添亮色:C# Winform图标资源库推荐 【下载地址】CWinform图标资源库 C# Winform 图标资源库本仓库提供了一系列适用于 C# Winform 程序开发的图标资源,包括 ico 和 png 格式,尺寸涵盖 16x16、32x32 等多种常用大小 项…...
超导量子处理器校准技术:频率分配与门优化
1. 超导量子处理器校准技术概述超导量子处理器校准是量子计算硬件实现中的关键环节,其核心目标是通过系统化的参数优化和误差抑制,确保量子比特能够可靠地执行高保真度的量子门操作。在Zuchongzhi 3.1处理器的研发过程中,我们成功集成了105个…...
【Nginx】Nginx 自定义错误页面全解:从 404 到 502 的用户体验与故障隔离实战
Nginx 自定义错误页面全解:从 404 到 502 的用户体验与故障隔离实战 本文面向已部署过简单 Nginx 服务、了解反向代理概念,但尚未系统掌握其错误处理机制与用户友好降级策略的中高级工程师。我们将彻底拆解 error_page 指令的工作原理、作用域继承、内部重定向行为,揭示为何…...
告别仿真报错!手把手教你用Quartus II 21.1和ModelSim 2022.1创建Testbench(附完整代码)
Quartus II与ModelSim联合仿真实战:从零构建高可靠性Testbench 在数字电路设计领域,仿真验证环节往往决定着项目成败。据统计,超过60%的FPGA开发时间消耗在功能验证阶段,而其中近半问题源于Testbench编写不当或仿真环境配置错误。…...
