【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…

521源码-免费源码-网站学习-代理用户UA信息获取方法

更多网站源码学习教程免费下载&#xff0c;请点击&#x1f449;-521源码-&#x1f448;获取最新资源 概述 这个 API 用于获取客户端的 User Agent 信息&#xff0c;并以 JSON 格式返回。 端点 URL: /get_user_agent.phpHTTP 方法: GET 请求 这个 API 不需要任何请求参数或…

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;中国科学院地…

Makefile学习笔记15|u-boot顶层Makefile01

Makefile学习笔记15|u-boot顶层Makefile01 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长&#xff0c;谢谢。 这里是目录 版本号信息 # SPDX-License-Identifier: GPL-2.0VERSION 2024 PATCHLEVEL 01 SUBLEVEL EXTRAVERSION -rc4 NAME 这里定义了u-bo…

Spark基础笔记之启动命令顺序

系统环境&#xff08;三台虚拟机&#xff09; node1 192.168.32.101&#xff08;主&#xff09; node2 192.168.32.102 node3 192.168.32.103 1、启动hdfs、yarn、historyserver&#xff08;hadoop用户启动&#xff09; # 启动dfs&#xff0c;启动后的服务名&#xff1a; Da…

【ai】pycharm安装langchain 相关module

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

Vue3拖拽修改左侧元素宽度组件开发

在开发过程中有时候会碰到需要拖拽修改页面元素宽度的需求&#xff0c;实际场景是页面上有并排两个或多个元素&#xff0c;需要拖拽修改其中一个元素的宽度&#xff0c;则只引入下方组件代替页面中需要被拖拽的元素及右侧相邻的元素。需要将需要拖拽的元素放进下面组件的左边的…

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

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

Flutter 中的 ClipOval 小部件:全面指南

Flutter 中的 ClipOval 小部件&#xff1a;全面指南 在Flutter的丰富布局库中&#xff0c;ClipOval是一个用于裁剪子组件的显示区域为椭圆形或圆形的小部件。这种裁剪效果可以用于创建头像、图标或其他图形元素的美观边框。本文将提供ClipOval的全面指南&#xff0c;帮助你了解…

一.架构设计

架构采用 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…

MyBatis进阶(<if><trim><where><set><foreach><include>标签的使用)

目录 < if >标签 < trim >标签 < where >标签 < set >标签 < foreach >标签 < include >标签 < if >标签 非必填字段 xml实现 <insert id"insertUserByCondition">INSERT INTO userinfo (username,passwor…