优选算法——滑动窗口2

优选算法——滑动窗口2

优选算法——滑动窗口

1.1004. 最大连续1的个数 III

题目描述

在这里插入图片描述

思路分析

这道题的核心是:找一个最长的子数组,其中最多包含 k 个 0

经典的 滑动窗口 问题。

为什么用滑动窗口?

  • 我们需要连续区间 → 滑动窗口天然适合
  • 窗口内维护「0 的个数 ≤ k」这个约束
  • 窗口扩张:右指针右移,遇到 0 就计数
  • 窗口收缩:当 0 的个数超过 k,左指针右移直到满足条件

算法流程

1. 初始化:left = 0, zeroCount = 0, maxLen = 0 2. 遍历数组,right 指针右移: - 如果 nums[right] == 0,zeroCount++ - 当 zeroCount > k 时,收缩左边界: - 如果 nums[left] == 0,zeroCount-- - left++ - 更新 maxLen = max(maxLen, right - left + 1) 3. 返回 maxLen 
在这里插入图片描述

代码实现

classSolution{public:intlongestOnes(vector<int>& nums,int k){int zero=0;int ret=0;for(int left=0,right=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;}};

2.1658. 将 x 减到 0 的最小操作数

题目描述

在这里插入图片描述

给定一个整数数组 nums 和整数 x。每次操作可以从数组最左端或最右端移除一个元素,使 x 减去该元素的值。返回将 x 恰好减到 0 的最小操作数,无法实现则返回 -1。

示例:

输入:nums = [1,1,4,2,3], x = 5 输出:2 解释:移除最右端的 3,再移除最右端的 2,x = 5 - 3 - 2 = 0 

思路分析

逆向思维 + 滑动窗口

从两端取数 → 等价于找一个中间连续子数组,其和为 total - x

  • 设数组总和为 sum
  • 问题转化为:找最长的子数组,使其和为 sum - x
  • 最小操作数 = n - 最长子数组长度

为什么?

  • 两端取走的元素和 = x
  • 剩下中间的元素和 = sum - x
  • 操作数最少 → 中间剩余最长

算法流程

1. 计算 target = sum(nums) - x 2. 如果 target &lt; 0,返回 -1(总和都不够减) 3. 滑动窗口找和为 target 的最长子数组 4. 返回 n - maxLen(若 maxLen 有效) 
在这里插入图片描述

代码实现

classSolution{public:intminOperations(vector<int>& nums,int x){int sum =0;int cmp=0;int ret=-1;for(auto e :nums){ sum+=e;}int target=sum-x;if(target<0)return-1;for(int left=0,right=0;right<nums.size();right++){ cmp+=nums[right];//进窗口while(cmp>target)//判断{ cmp-=nums[left++];//出窗口}if(cmp==target)//更新结果 ret=max(ret,right-left+1);}if(ret==-1)return ret;elsereturn nums.size()-ret;}};

Read more

无人机 5.8G 模拟图传电路设计方案及性能分析

一、什么是 5.8G 模拟图传? 简单说,5.8G 模拟图传就是无人机的 “千里眼”,能把天上拍的画面实时传到地面。你在遥控器上看到的无人机视角,全靠它来实现。 为啥是 5.8G?因为这个频段干扰少,就像高速路上车少,信号跑起来更顺畅。而且模拟信号传输快,延迟低,特别适合 FPV 竞速这种需要快速反应的场景 —— 总不能无人机都撞墙了,你才在屏幕上看到障碍物吧? 二、工作原理:信号的 “旅行记” 2.1 信号采集:无人机的 “眼睛” 无人机上的摄像头就像手机相机,能把看到的景象变成电信号。但这时候的信号很弱,还带着 “杂音”,就像说话含着口水,听不清。 这时候会经过两步处理: * 过滤杂音:用低通滤波器 “过滤” 掉高频噪音,就像用滤网把水里的沙子去掉。 * 信号放大:放大器把信号变强,

By Ne0inhk
Java 中间件:RocketMQ 定时消息(延迟级别配置)

Java 中间件:RocketMQ 定时消息(延迟级别配置)

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Java中间件这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Java 中间件:RocketMQ 定时消息(延迟级别配置) 🚀 * 什么是 RocketMQ 延迟消息?⏳ * 延迟级别(Delay Level)详解 * RocketMQ 延迟消息的工作原理 🔧 * 准备工作:搭建 RocketMQ 环境 🛠️ * Java 代码示例:发送延迟消息 📤 * Maven 依赖 * 生产者代码 * 消费者代码 * 运行效果 * 自定义延迟级别 ⚙️ * 修改 Broker 配置 * 验证自定义级别 * 延迟消息的使用限制与注意事项 ⚠️ * 1. 不支持任意时间延迟 * 2. 延迟精度问题 * 3. 消息大小限制

By Ne0inhk
从Oracle到金仓KES:PL/SQL兼容性与高级JSON处理实战解析

从Oracle到金仓KES:PL/SQL兼容性与高级JSON处理实战解析

摘要:上半年突然收到通知,我们做的政府项目要求迁移数据库到KingbaseES,一开始没听说过这个数据库有点慌,经过一番学习觉得是国产很优秀数据库,金仓KES数据库深度兼容Oracle PL/SQL语法,支持存储过程、函数、包等高级特性,可平滑迁移核心业务逻辑。同时提供原生JSON支持和丰富函数,满足现代数据处理需求。通过KDTS/KDMS工具评估兼容性,进行充分测试和性能调优,金仓KES是企业数据库国产化替代的可靠选择。 引言:为什么PL/SQL兼容性是国产化迁移的“定心丸”? 在金融、政务、能源等关键行业的数据库国产化替代浪潮中,Oracle数据库的迁移是重中之重,也是难度最大的环节之一。其中,承载了核心业务逻辑的存储过程、函数、触发器等PL/SQL代码,因其复杂性和对数据库引擎的强依赖性,常常成为迁移路上最大的“拦路虎”。作为中国电子科技集团(CETC)旗下的核心数据库企业,电科金仓 的拳头产品——金仓KES数据库,将高兼容度的PL/SQL支持作为其核心能力,旨在从根本上降低迁移成本,保障业务平滑过渡。 本文将从实战角度,深度剖析金仓KES对Oracle风格PL/SQL的兼

By Ne0inhk
Spring WebFlux核心原理-对比Servlet与响应式模型

Spring WebFlux核心原理-对比Servlet与响应式模型

目录 🎯 我踩过的坑 ✨ 摘要 1. 别急着用WebFlux,先搞清楚这两个问题 1.1 什么时候该用WebFlux? 1.2 性能神话 vs 现实 2. 线程模型:一个线程 vs 少量线程 2.1 Servlet的"一个请求一个线程" 2.2 WebFlux的"事件循环" 3. 请求处理流程对比 3.1 Spring MVC的请求处理链 3.2 WebFlux的请求处理链 4. 内存管理:堆内 vs 堆外 4.1 Servlet的内存模型 4.2

By Ne0inhk