【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数

【LeetCode刷题】Day 8

  • 题目1:1004.最大连续1的个数 III
    • 思路分析:
    • 思路1:暴力枚举+zero计数器
    • 思路2:滑动窗口+zero计数器
  • 题目2:1658. 将x减到0的最小操作数
    • 思路分析:
    • 思路1:暴力枚举
    • 思路2:滑动窗口O(N)
  • 收获满满✨:

在这里插入图片描述

题目1:1004.最大连续1的个数 III

在这里插入图片描述

思路分析:

如果我们根据题干意思来做,每次寻找并翻转k个0的话,难度还是比较大,很复杂。我们不妨使用zero计数器来控制0的数量,控制在k以内。

思路1:暴力枚举+zero计数器

思路2:滑动窗口+zero计数器

本题滑动窗口分析:
1. 进窗口:nums[right]!=0或者zero小于k,就进窗口,执行 right++。意思就是right++就代表符合题意。
2. 判断: 主要目的是更新 left到符合题干的位置,即: 减去一个零,使得zero计数器为k的位置。更新到位置也就完成了 出窗口
3. 更新结果: ret是满足一个就更新一次,进窗口就是增加,出窗口就是减小(所以要和之前的比对,取最大)。

代码实现:

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int left=0,right=0,n=nums.size();int zero=0,ret=0;while(right<n){if(nums[right]==0) zero++; //zero计数器while(zero>k)           //出窗口if(nums[left++]==0) zero--;ret=max(ret,right-left+1);//更新结果right++;				//符合要求进窗口-->right++;}return ret;}
};

LeetCode链接:1004.最大连续1的个数


题目2:1658. 将x减到0的最小操作数

在这里插入图片描述

思路分析:

一会左删一会右删,让删除的总数等于x,这道题我们直接做会很难。
不妨正难则反:中间的部分的和一直是:sum-x,要求删除最少,那就是中间长度最长。这样题目要求就变成了:找子数组的和等于target=sum-x的最长子数组。

思路1:暴力枚举

思路2:滑动窗口O(N)

本题滑动窗口分析:
1. 进窗口: 维护数据 sum1right++进窗口。
2. 判断: 如果 sum1>target,则需要出窗口来减少 sum1。出窗口操作: sum1-=nums[left++];
3. 更新结果: 需要满足条件再更新结果: if(sum1==target) ret=max(ret,right-left+1);
代码实现:
class Solution {
public:int minOperations(vector<int>& nums, int x) {int left=0,right=0,n=nums.size();int sum=0,sum1=0,ret=-1;//求和for(int i=0;i<n;i++)sum += nums[i];int target=sum-x;//细节处理:if(target<0) return -1;while(right<n){sum1+=nums[right];              //进窗口while(sum1>target)              //判断sum1-=nums[left++];         //出窗口if(sum1==target)ret=max(ret,right-left+1);  //更新结果right++;}return (ret==-1?ret:n-ret);}
};

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


收获满满✨:

  • 正难则反,这个往往是最难的,需要多多体会。
  • 体会进窗口和出窗口,理解方式多样。

懒猫配果汁,美好周末!🎈🎈周末快乐~
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联邦学习(一)

世界第一本“联邦学习”专著——《联邦学习》。作者阅读数书籍《联邦学习实战》。 1.联邦学习概述 在构件全局模型时,其效果与数据被整合在一起进行集中式训练的效果几乎一致,这便是联邦学习提出的动机和核心思想。 核心理念:数据不动模型动,数据可用不可见。 传统训练范式…

Linux|ubuntu22.04安装CUDA最新完整教程

文章目录 一、安装前准备工作查看GPU和型号查看GCC版本*下载gcc12 *检查驱动 二、安装CUDA Toolkit*安装驱动 三、安装后的工作必要操作推荐的操作开启守护进程模式删除本地下载安装包 四、验证删除CUDA常见问题及解决方案还需要安装cuDNN吗&#xff1f;nvcc: No such file or …

贪心-AcWing 1522. 排成最小的数字-XMUOJ石板序列

题目 思路 getline() 是 C 标准库中的一个函数&#xff0c;用于从输入流中读取一行文本&#xff0c;并将其存储为字符串。它可以从标准输入、文件流、字符串流等不同类型的输入流中读取数据。C中istringstream、ostringstream、stringstream详细介绍和使用_c istringstream-CS…

C++之std::is_trivially_copyable(平凡可复制类型检测)

目录 1.C基础回顾 1.1.平凡类型 1.2.平凡可复制类型 1.3.标准布局类型 2.std::is_trivially_copyable 2.1.定义 2.2.使用 2.3.总结 1.C基础回顾 在C11中&#xff0c;平凡类型&#xff08;Trivial Type&#xff09;、平凡可复制类型&#xff08;TrivialCopyable&#x…

Python语言基础学习(下)

目录 一、顺序语句 二、条件语句 (1) if (2) if - else (3) if - elif - else 缩进和代码块 空语句 pass 三、循环语句 while 循环 for 循环 continue break 四、函数 创建函数 调用函数 函数返回 函数变量 函数递归 关键字参数 五、列表和元组 创建列表 …

Windows、Linux下,基于QT的打包方法

整理这篇文档的意义在于&#xff1a;自己走了很多弯路&#xff0c;淋过雨所以想为别人撑伞&#xff0c;也方便回顾&#xff0c;仅供参考 ps: 第一次做Windows下打包&#xff0c;用了2小时&#xff0c;第二次20秒第一次做Linux(ubuntu)下打包&#xff0c;用了8小时&#xff0c;…

不拍视频,不直播怎么在视频号卖货赚钱?开一个它就好了!

大家好&#xff0c;我是电商糖果 视频号这两年看着抖音卖货的热度越来越高&#xff0c;也想挤进电商圈。 于是它模仿抖音推出了自己的电商平台——视频号小店。 只要商家入驻视频号小店&#xff0c;就可以在视频号售卖商品。 具体怎么操作呢&#xff0c;需要拍视频&#xf…

【顶刊新文】nature plants|植物高度作为高山碳固存和生态系统对变暖响应的指标

文章简介 论文名称&#xff1a;Plant height as an indicator for alpine carbon sequestration and ecosystem response to warming&#xff08;植物高度作为高山碳固存和生态系统对变暖响应的指标&#xff09; 第一作者及单位&#xff1a;Quan Quan&#xff08;中国科学院地…

【ai】pycharm安装langchain 相关module

pycharm module install 【Python学习 】一篇文章教你PyCharm如何快速安装module 【python】pycharm如何安装python的模块包版本 2024.1.2 RC2 找到当前的虚拟项目 找到解释器 我现在配置为专门为openai-start 准备的3.10 版本+ 号可以找到模块

pdf拆分成多个文件 pdf拆分成一页一页

pdf拆分成多个文件的方法。在现代办公环境中&#xff0c;PDF文件因其跨平台、保持格式一致等特性&#xff0c;成为了广泛使用的文件格式。然而&#xff0c;有时我们需要对PDF文件进行拆分&#xff0c;以便更好地管理和使用其中的内容。本文将详细介绍PDF拆分的方法和步骤&#…

一.架构设计

架构采用 ddd 架构&#xff0c;不同于传统简单的三层的架构&#xff0c;其分层的思想对于大家日后都是很有好处的&#xff0c;会给大家的思想层级&#xff0c;提高很多。 传统的项目 现有的架构 采取ddd架构&#xff0c;给大家在复杂基础上简化保留精髓&#xff0c;一步步进行…

LabVIEW直方图应用解析

概述 在LabVIEW中&#xff0c;直方图是一种重要的工具&#xff0c;用于分析和展示数据的分布情况。它通过将数据分成若干区间并绘制对应频数&#xff0c;可以帮助用户了解数据的集中趋势、离散程度和分布形态。本文将详细介绍LabVIEW中直方图的使用方法、适用场合、实际意义及…

19 QinQ技术(Vlan两层封装)

1 什么是QinQ&#xff1f; QinQ&#xff08;802.1Q-in-802.1Q&#xff09;&#xff0c;也叫做VLAN Stacking或Double VLAN&#xff0c;由IEEE 802.1ad标准定义&#xff0c;**是一项扩展VLAN空间的技术&#xff0c;**通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩…

工具使用-网络性能测试工具(iperf)-TCP 和 UDP 的吞吐量-包转发率参数的理解

时间戳&#xff1a;2024年5月26日15:18:39 iperf 和 netperf 都是最常用的网络性能测试工具&#xff0c;测试 TCP 和 UDP 的吞吐量。它们都以客户端和服务器通信的方式&#xff0c;测试一段时间内的平均吞吐量。 接下来&#xff0c;我们就以 iperf 为例&#xff0c;看一下 TC…

9.2 Go语言入门(包和导入)

Go语言入门&#xff08;包和导入&#xff09; 目录一、包和导入1. 包&#xff08;Package&#xff09;1.1 包的定义1.2 包的作用1.3 main 包1.4 非 main 包 2. 导入&#xff08;Import&#xff09;2.1 导入标准库2.2 导入第三方包2.3 导入本地包2.4 导入别名2.5 导入并调用初始…

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台&#xff1a;聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore…

数据库系统原理实验报告6 | 视图

整理自博主本科《数据库系统原理》专业课自己完成的实验报告&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本&#xff1a; ​ ———— 本次实验使用到的图形化工具&#xff1a;Heidisql ​ 目录 一、实验目的 二、实验内容 1&#xff0e;根据EDUC数…

揭秘C++ String容器:字符串操作的艺术

目录 ​编辑 引言 一、初识std::string&#xff1a;构造与初始化 二、字符串的操纵艺术&#xff1a;拼接、查找与替换 三、访问与遍历&#xff1a;字符的细腻触感 四、大小与容量&#xff1a;动态调整的智慧 五、进阶功能&#xff1a;探索更多可能 结语 引言 在C标准库…

Java 8

这次我学习了第八次Java课程 这次课在假期&#xff0c;包含了两天的一大波内容 对于编写项目过程中有许多的 辅助类 System System.out.println() 打印 Scanner Scanner sc new Scanner(System.in) 赋值 Random 随机数 Math 数学运算 日期 要想使用日期方法就要引入包Date 1…

人工智能为犯罪地下世界带来了巨大的生产力提升

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…