【优选算法必刷100题】第011~012题(同向双指针:滑动窗口算法):最大连续1的个数 III、将 x 减到 0 的最小操作数

【优选算法必刷100题】第011~012题(同向双指针:滑动窗口算法):最大连续1的个数 III、将 x 减到 0 的最小操作数

🔥艾莉丝努力练剑:个人主页

专栏传送门:《C语言》《数据结构与算法》C/C++干货分享&学习过程记录Linux操作系统编程详解笔试/面试常见算法:从基础到进阶

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬艾莉丝的简介:


🎬艾莉丝的算法专栏简介:



目录

011  最大连续1的个数 III

1.1  题目详解

1.2  算法原理以及代码实现

1.2.1  解法思路:滑动窗口

1.2.2  算法流程

1.2.3  代码实现

1.3  博主手记

012  将 x 减到 0 的最小操作数

2.1  题目详解

2.2  算法原理

2.2.1  解法思路:滑动窗口

2.2.2  算法流程

2.2.3  代码实现

2.3  博主手记

结尾


011  最大连续1的个数 III

力扣链接:1004. 最大连续1的个数 III

力扣题解链接:滑动窗口解决【最大连续1的个数III】问题

题目描述:

1.1  题目详解

1.2  算法原理以及代码实现

1.2.1  解法思路:滑动窗口

不要去想怎么翻转,不要把问题想的很复杂,这道题的结果无非就是一段连续的1中间塞了k个0。
因此,我们可以把问题转化成:求数组中一段最长的连续区间,要求这段区间内的个数不超过k个
既然是连续区间,可以考虑使用「滑动窗口」来解决问题。

1.2.2  算法流程

1、初始化一个大小为2的数组就可以当做哈希表(hash)了;初始化一些变量left = 0,right =0,ret = 0;

2、当right小于数组大小的时候,一直下列循环——

(1)让当前元素进入窗口,顺便统计到哈希表中;

(2)检查 0 的个数是否超标:

1)如果超标,依次让左侧元素滑出窗口,顺便更新哈希表的值,直到的个数恢复正
常;

(3)程序到这里,说明窗口内元素是符合要求的,更新结果;

(4)right++,处理下一个元素;

3、循环结束后,ret存的就是最终结果。

1.2.3  代码实现

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; } };
时间复杂度:O(n),空间复杂度:O(1)。

1.3  博主手记

本题整个的思路、算法原理、解题过程博主在纸上推导了一遍,大家可以参考一下手记的推导过程!最好做题的过程中自己也推导一遍!!!自己推导很重要!


012  将 x 减到 0 的最小操作数

力扣链接:1658. 将 x 减到 0 的最小操作数

力扣题解链接:滑动窗口解决【将 x 减到 0 的最小操作数】问题

题目描述:

2.1  题目详解

2.2  算法原理

2.2.1  解法思路:滑动窗口

题目要求的是数组「左端+右端」两段连续的、和为x的最短数组,信息量稍微多一些,不易理清思路;我们可以转化成求数组内一段连续的、和为sum(nums) - x的最长数组。此时,就是熟悉的「滑动窗口」问题了。

这道题和我们介绍【滑动窗口】的第一道题目LCR 008. 长度最小的子数组有点像。

相关博客链接:【优选算法必刷100题】第009~010题(同向双指针:滑动窗口算法):长度最小的子数组、无重复字符的最长子串问题求解

2.2.2  算法流程

1、转化问题:求target = sum(nums) - x。如果target<0,问题无解;
2、初始化左右指针 l = 0,r = 0(滑动窗口区间表示为 [ l,r) ,左右区间是否开闭很重要,必须设定与代码一致),记录当前滑动窗口内数组和的变量sum=◎,记录当前满足条件数组的最大区间长度maxLen = -1;
3、当小于等于数组长度时,一直循环:

(1)如果sum<target,右移右指针,直至变量和大于等于target,或右指针已经移到头;
(2)如果sum>target,右移左指针,直至变量和小于等于target,或左指针已经移到头;
(3)如果经过前两步的左右移动使得sum == target,维护满足条件数组的最大长度,并
让下个元素进入窗口。

4、循环结束后,如果maxLen的值有意义,则计算结果返回;否则,返回 -1。

2.2.3  代码实现

class Solution { public: int minOperations(vector<int>& nums, int x) { int sum = 0; for (int a : nums)sum += a; int target = sum - x; //细节问题 if (target < 0)return -1; int ret = -1; for (int left = 0, right = 0, tmp = 0; right < nums.size(); right++)//tmp:和sum区分 { tmp += nums[right];//进窗口 //判断 while (tmp > target) tmp -= nums[left++];//出窗口 if (tmp == target)//更新结果 ret = max(ret, right - left + 1); } if (ret == -1)return ret; else return nums.size() - ret; } };
时间复杂度:O(n),空间复杂度:O(1)。

2.3  博主手记

本题整个的思路、算法原理、解题过程博主在纸上推导了一遍,大家可以参考一下手记的推导过程!最好做题的过程中自己也推导一遍!!!自己推导很重要!


结尾

往期回顾:

【优选算法必刷100题】第009~010题(同向双指针:滑动窗口算法):长度最小的子数组、无重复字符的最长子串问题求解

结语:看到这里,不要忘记给博主来个“一键四连”哦!

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡

૮₍ ˶ ˊ ᴥ ˋ˶₎ა


Read more

【MySQL筑基篇】新手必看:聚簇索引、非聚簇索引与回表,一篇扫清盲区

【MySQL筑基篇】新手必看:聚簇索引、非聚簇索引与回表,一篇扫清盲区

🍃 予枫:个人主页 📚 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》 💻 Debug 这个世界,Return 更好的自己! 引言 做后端开发的同学,大概率都听过“索引优化”,也用过主键索引提升查询速度。但你真的懂索引吗?日常开发中,不少同学遇到查询卡顿就盲目加索引,结果反而导致数据增删改效率下降;还有人疑惑,为什么同样是索引,主键查询秒出结果,普通索引查询却要慢半拍?除了主键,还有哪些核心索引类型?为什么有的查询不用“绕路”,有的却要额外“回表”?今天咱们从数据库物理存储的底层逻辑出发,逐字拆解聚簇索引与非聚簇索引的核心概念,帮你夯实索引入门基础,为后续吃透B+树结构、搞定索引优化铺路~ 建议点赞收藏,避免后续需要时找不到! 文章目录 * 引言 * 一、索引基础:不止是“快速查找” * 1.1 为什么需要关注物理存储? * 二、聚簇索引:数据与索引“合二为一”

By Ne0inhk

AI读脸术前端美化:Bootstrap样式升级实战

AI读脸术前端美化:Bootstrap样式升级实战 1. 项目背景与核心能力 你有没有试过上传一张照片,几秒钟就得到“Male, (35-42)”这样的结果?不是靠猜,也不是靠经验,而是模型在后台默默完成了一整套人脸分析流程——检测、定位、分类、回归。这就是我们今天要聊的“AI读脸术”:一个专注年龄与性别识别的轻量级Web服务。 它不跑在GPU服务器上,也不需要装PyTorch或TensorFlow;它用的是OpenCV自带的DNN模块,加载三个Caffe模型(人脸检测+性别分类+年龄回归),全部跑在CPU上,启动只要1秒,内存占用不到300MB。更关键的是,它已经封装成开箱即用的镜像,点一下HTTP按钮就能访问Web界面——但默认界面有点“程序员直男风”:白底、黑字、居中上传框、没有响应式、移动端点不动……这显然配不上它背后扎实的AI能力。 所以,这次我们不做模型优化,不调参,不换架构,专攻前端体验升级:用Bootstrap 5把原始界面彻底重写,让它既专业又友好,既轻快又耐看,真正让技术“

By Ne0inhk
Trae IDE评测体验:通过 MCP Server - Figma AI Bridge 一键将 Figma 转为前端代码

Trae IDE评测体验:通过 MCP Server - Figma AI Bridge 一键将 Figma 转为前端代码

Trae IDE评测体验:通过 MCP Server - Figma AI Bridge 一键将 Figma 转为前端代码 在现代前端开发中,从设计稿到可用页面的交付往往需要大量重复劳动:切图、手写样式、布局调整……而借助 MCP Server - Figma AI Bridge,我们可以将 Figma 设计稿自动转换成整洁的 HTML/CSS/JS 代码,并立即生成可预览的网页。一键化、傻瓜式操作,让设计交付效率跃升。 先下载 Trae IDE,让我们一起开始吧! [立即免费获取 Trae]:https://trae.ai 演示环境 本文测试使用的系统环境如下: * Trae IDE 版本:0.

By Ne0inhk

开源视觉模型部署教程:GLM-4.6V-Flash-WEB一键启动实践

开源视觉模型部署教程:GLM-4.6V-Flash-WEB一键启动实践 想快速体验一个能看懂图片、还能跟你聊天的AI助手吗?智谱最新开源的GLM-4.6V-Flash-WEB模型,就是一个功能强大且部署简单的选择。它不仅能通过网页界面直接对话,还提供了API接口,方便开发者集成到自己的应用里。 今天,我就带你从零开始,手把手完成这个视觉大模型的部署和启动。整个过程非常简单,只需要三步,哪怕你是刚接触AI的新手,也能在10分钟内搞定。我们主要的目标就是:快速部署,立即体验。 1. 环境准备与镜像部署 万事开头难,但这次开头很简单。部署GLM-4.6V-Flash-WEB,你只需要一个能运行Docker的环境。这里我们以常见的云服务器或本地支持Docker的Linux环境为例。 1.1 获取部署镜像 首先,你需要找到模型的部署镜像。根据提供的资料,我们可以从相关的镜像仓库获取。这里假设你已经有一个可用的环境,并且安装了Docker。 打开你的终端,执行以下命令来拉取镜像。这个镜像已经包含了运行模型所需的所有依赖,省去了你手动安装Python、PyTorch等一堆库的麻烦。

By Ne0inhk