算法基础学习Day6(动态窗口)

在这里插入图片描述

文章目录

  • 1.题目
  • 2.题目解答
    • 1.最大连续1的个数
      • 题目及题目解析
      • 算法学习
        • 思路一:暴力解法
        • 思路二:滑动窗口
      • 代码提交
    • 2.将x减到0的最小操作数
      • 题目及题目解析
      • 算法学习
        • 滑动窗口解决问题
      • 代码提交

1.题目

  1. 1004. 最大连续1的个数 III - 力扣(LeetCode)
  2. 1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode)

2.题目解答

1.最大连续1的个数

题目及题目解析

image-20241210182148011

算法学习

思路一:暴力解法

我们可以通过直接遍历将数组,将所以可能全部找出来,然后将最长的数组返回即可

解法如下:

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int maxLen = 0;for (int start = 0; start < nums.size(); ++start) {int zeroCount = 0;int end = start;while (end < nums.size()) {if (nums[end] == 0) {zeroCount++;}if (zeroCount <= k) {maxLen = max(maxLen, end - start + 1);} else {break;}end++;}}return maxLen;}
};

当然这是过不了的需要我们优化

image-20241210185312807

思路二:滑动窗口

但是其实发现right指针并不用每次都回到left的右边

我们可以通过计数让left向后走,而right可以保持在原有位置

也就是说可以用滑动窗口解决这个问题:

1.进窗口

image-20241210191931544

k加上right能移动到的最大位置就是窗口的初始化

2.出窗口

零的个数大于k时,就要将left向右移动,然后对left进行判断,

零的个数减到等于k此时就完成了出窗口

每次出窗口对长度进行判断求最大的长度即可

这部分的代码如下:

int ret = 0;
for(int right = 0,left = 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);//判断}

代码提交

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int left = 0,right =0,zero = 0;int ret = 0;for(;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.将x减到0的最小操作数

题目及题目解析

image-20241210193455492

算法学习

这道题如果直接做会很难,但是如果将思路转化一下,就会变得简单了:

image-20241210194229560

要求的数的和为x,我们可以将这个数组的和计算出为sum,那么剩下的数组就为sum-x

又由于要求出最小长度就可以转化为求最长子数组的长度了

那么这道题就变得简单了求最长子数组的长度且数组的和为target

滑动窗口解决问题

转换后的这道题之前写过:

int right = 0,left = 0,sum = 0,ret = 0;
while(right<nums.size())
{sum+=nums[right];while(sum>target){sum -= nums[left];left++;}if(sum == target){ret = max(ret,right-left+1);}right++;
}

核心代码写完后后续将判断返回的内容加入即可

代码提交

class Solution {
public:int minOperations(vector<int>& nums, int x) {int sum = 0,target = 0,left = 0,right = 0;for(int i = 0;i<nums.size();i++){sum+=nums[i];}target = sum-x;if(target<0){return -1;}sum = 0;int ret = -1;while(right<nums.size()){sum+=nums[right];while(sum>target){sum -= nums[left];left++;}if(sum == target){ret = max(ret,right-left+1);}right++;}if(ret==-1){return ret;}else{return nums.size()-ret;}}
};

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

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

相关文章

基于springboot+vue的公交线路查询系统(全套)

一、系统架构 前端&#xff1a;vue | element-ui | html 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页2 03. web端-注册 04. web端-登录 …

ASP.NET Core8.0学习笔记(二十五)——EF Core Include导航数据加载之预加载与过滤

一、导航属性数据加载 1.在EF Core中可以使用导航属性来加载相关实体。 2.加载实体的三种方式&#xff1a; (1)预先加载&#xff1a;直接在查询主体时就把对应的依赖实体查出来&#xff08;作为初始查询的一部分&#xff09; (2)显式加载&#xff1a;使用代码指示稍后显式的从…

Linux 基础环境的开发工具以及使用(下)

1. make / Makefile 自动化构建的工具 1&#xff09;引入 在我们进行一些大型的工程的时候&#xff0c;代码量是极其大&#xff0c;当我们代码在进行一系列的编译的时候&#xff0c;难免会出现一些错误&#xff0c;当我们对错误进行一系列的更改之后&#xff0c;难道我们需要…

沃丰科技智能客服在跨境电商独立站中的核心角色

随着全球化进程的加速和互联网技术的不断发展&#xff0c;跨境电商行业蓬勃兴起&#xff0c;为消费者提供了更广阔、更便捷的购物选择。在这样一个竞争激烈的市场环境中&#xff0c;优质的客户服务成为了企业脱颖而出的关键。沃丰科技智能客服凭借其先进的技术和人性化的设计理…

Centos7下搭建Prometheus+Grafana监控

Prometheus 监控 Prometheus 监控系统的架构包括以下组件&#xff1a; Prometheus Server&#xff1a; Prometheus 服务器是监控系统的核心组件&#xff0c;负责收集、存储和处理指标数据。它定期从各种数据源&#xff08;如 Exporter、Agent 等&#xff09;拉取指标数据&…

MyBatis-Plus(为简化开发而生)

一、MyBatis-Plus概述 官网&#xff1a; baomidou.com MyBatis-Plus&#xff08;简称 MP&#xff09; 在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 &#xff08;1&#xff09;单表操作 不需要编写sql语句&#xff0c;封装方法&#xff0c;…

深入解析 C++11 的 `std::atomic`:误区、性能与实际应用

在现代 C 开发中&#xff0c;std::atomic 是处理多线程同步时的重要工具之一。它通过提供原子操作保证了线程安全&#xff0c;但在实际使用时却隐藏着许多不为人知的陷阱和性能影响。本篇文章将带你深入理解 std::atomic 的使用方式、潜在问题&#xff0c;以及如何正确应用于多…

芋道源码,芋道sql,yudao,yudao-vue-pro拒绝割韭菜

芋道的开发指南实际上只需要小小的操作就可以观看啦 为了避免被割韭菜 我们可以使用插件去进行解锁文档 项目地址 otomayss/free-yd (github.com)[这里是图片002]https://github.com/otomayss/free-yd

Mac软件推荐

Mac软件推荐 截图SnipasteXnipBob 快捷启动Raycast 系统检测Stats 解压缩The UnarchiverKeka&#xff08;付费&#xff09; 视频播放IINA 视频下载Downie&#xff08;付费&#xff09; 屏幕刘海TopNotchMediaMate&#xff08;付费&#xff09;NotchDrop&#xff08;付费&#x…

车站值班员题库

1. 联系用手信号显示十、五、三车距离信号中的“三车”&#xff08;约33m&#xff09;信号时&#xff0c;昼间的显示方式为展开的绿色信号旗单臂平伸下压 &#xff08; 一 &#xff09;次。J442 2. 联系用手信号显示股道号码时&#xff0c;昼间右臂向上直伸&#xff0c…

BI中场战事:国外厂商退,国产厂商进

从沉睡的黄金到经济的新宠&#xff0c;数据要素正上演华丽转身。 近年来&#xff0c;数字经济的长驱向前&#xff0c;离不开数据要素价值释放所带来的持续动力。作为第五大生产要素&#xff0c;数据要素的价值释放需要从数据采集、传输到存储、治理&#xff0c;再到分析和可视…

2024年华中杯数学建模C题基于光纤传感器的平面曲线重建算法建模解题全过程文档及程序

2024年华中杯数学建模 C题 基于光纤传感器的平面曲线重建算法建模 原题再现 光纤传感技术是伴随着光纤及光通信技术发展起来的一种新型传感器技术。它是以光波为传感信号、光纤为传输载体来感知外界环境中的信号&#xff0c;其基本原理是当外界环境参数发生变化时&#xff0c…

【H2O2|全栈】MySQL的基本操作(三)

目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询&#xff0c;与单表查询…

从单体到微服务:如何借助 Spring Cloud 实现架构转型

一、Spring Cloud简介 Spring Cloud 是一套基于 Spring 框架的微服务架构解决方案&#xff0c;它提供了一系列的工具和组件&#xff0c;帮助开发者快速构建分布式系统&#xff0c;尤其是微服务架构。 Spring Cloud 提供了诸如服务发现、配置管理、负载均衡、断路器、消息总线…

yarn : 无法加载文件 C:\Users\L\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁

关于执行安装yarn命令后执行yarn -v报错&#xff1a; 先确认执行安装yarn命令是否有误 # 安装yarn npm install yarn -g 终端输入set-ExecutionPolicy RemoteSigned 当然如果yarn -v仍然执行失败&#xff0c;考虑使用管理员方式运行IDEA&#xff0c; 注&#xff1a;如上操作…

java全栈day12-后端Web实战(IOC+DI)

前言&#xff1a;前面的基础知识了解后进入实战篇&#xff0c;从以下四个方面进行准备 一、开发规范 1.1前后端分离开发 前言回顾 二、Restful风格 引言&#xff1a;前端与后端在进行交互的时候&#xff0c;所使用的url风格叫Restful。 2.1概述 小结 2.2环境准备 2.2.1apif…

链式设计模式——装饰模式和职责链模式

一、装饰模式 1、概述 动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更为灵活。 ConcreteComponent &#xff1a;是定义了一个具体的对象&#xff0c;可以给这个对象添加一些职责&#xff1b;Decorator &#xff1a;装饰抽象…

Java——容器(单例集合)(上)

一 容器介绍 容器&#xff0c;是用来容纳物体、管理物体。生活中,我们会用到各种各样的容器。如锅碗瓢盆、箱子和包等 程序中的“容器”也有类似的功能&#xff0c;用来容纳和管理数据。比如&#xff0c;如下新闻网站的新闻列表、教育网站的课程列表就是用“容器”来管理 视频…

word poi-tl 表格功能增强,实现表格功能垂直合并

目录 问题解决问题poi-tl介绍 功能实现引入依赖模版代码效果图 附加&#xff08;插件实现&#xff09;MergeColumnData 对象MergeGroupData 类ServerMergeTableData 数据信息ServerMergeTablePolicy 合并插件 问题 由于在开发功能需求中&#xff0c;word文档需要垂直合并表格&…

GPT系列模型简要概述

GPT-1&#xff1a;&#xff08;0.117B参数量&#xff0c;0.8B words预训练数据) 动机&#xff1a; 在RNN和Transformer之间&#xff0c;选择了后者。 和《All your need is Attention》翻译模型的Encoder-Decoder架构相比&#xff0c;只保留Decoder&#xff0c;因此去掉了Cross…