当前位置: 首页 > news >正文

【算法】滑动窗口——将x减到0的最小操作数

本节博客主要是讲的我解“将x减到0的最小操作数”这道题的思路历程,从最开始的想法到代码提交的详细记录,有需要借鉴即可。

目录

  • 1.题目
  • 2.代码示例
  • 3.细节
    • 3.1left越界
    • 3.2特殊情况
  • 4.总结

1.题目

题目链接:LINK
在这里插入图片描述
看题目意思是就是给你一个数X,让你拿着数组中的最左边或者最右边的数字与这个数字抵消(相减),直到X为0,或者找不到,如果可以抵消掉,记录拿这个数组中最少的一个数字个数,而且用数组中的值的时候,必须用两头的。

这个暴力求解…都不知道下一次是用左边的数字还是右边的数字,…,基本暴力解法就想不到了。

这里我们老师讲的,说要用到转换思想——“正难则反”
什么意思呢?
其实对于这个题目来说,整个数组可以分为三块,即下图:
在这里插入图片描述
说白了就让我们找left + right这两块中最小的数字个数
那可以等效于让我们找 该数组总数字个数 - mind最大数字个数

顺着前面“滑动窗口”的代码思路:
大体就可以写出下面代码:

2.代码示例

class Solution {
public:int minOperations(vector<int>& nums, int x) {int ALsum = 0;int n = nums.size();for(size_t i = 0;i<n;i++){ALsum+=nums[i];}long long target = ALsum - x;//中间的目标值,满足目标值就进行更新结果int ret = -1;//代表两边的长度,取最小值int len = 0;//代表left和right之间的长度,取最大值long long sum = 0;//代表中间区间的和//处理特殊情况if (sum == target){return n;}for(int right = 0,left = 0; right < n; right++){//进窗口sum+=nums[right];//出窗口while(sum > target && left < right){sum-=nums[left];left++;}//更新结果if(sum == target){len = max(len,right - left + 1);}}return ret = len == 0 ? -1 : n - len;}
};

这个题做完之后感觉还是有一两个坑的,下面进行展示:

3.细节

3.1left越界

这个问题呢,也可以说是X > 整个数组之和,即target小于0,导致了left会不断右移的情况:
在这里插入图片描述

class Solution {
public:int minOperations(vector<int>& nums, int x) {int ALsum = 0;int n = nums.size();for(size_t i = 0;i<n;i++){ALsum+=nums[i];}int target = ALsum - x;//中间的目标值,满足目标值就进行更新结果int ret = -1;//代表两边的长度,取最小值int len = 0;//代表left和right之间的长度,取最大值int sum = 0;//代表中间区间的和for(int right = 0,left = 0; right < n; right++){//进窗口sum+=nums[right];//出窗口while(sum > target){sum-=nums[left];left++;}//更新结果if(sum == target){len = max(len,right - left + 1);}}return ret = len == 0 ? -1 : n - len;}
};

这个主要是越界问题,是left越界了。

3.2特殊情况

在这里插入图片描述

class Solution {
public:int minOperations(vector<int>& nums, int x) {int ALsum = 0;int n = nums.size();for(size_t i = 0;i<n;i++){ALsum+=nums[i];}int target = ALsum - x;//中间的目标值,满足目标值就进行更新结果int ret = -1;//代表两边的长度,取最小值int len = 0;//代表left和right之间的长度,取最大值int sum = 0;//代表中间区间的和for(int right = 0,left = 0; right < n; right++){//进窗口sum+=nums[right];//出窗口while(sum > target && left < right){sum-=nums[left];left++;}//更新结果if(sum == target){len = max(len,right - left + 1);}}return ret = len == 0 ? -1 : n - len;}
};

这个是出了什么问题呢?就是这是一种数组里的数字全部都与X相消才行,特殊情况吧算是,需要特别处理一下。
我写的这个代码刚好默认是mid组至少有一个数字的,用我写的代码肯定是找不到的,所以需要特殊判断一下。

4.总结

感觉这个题关键是刚上来的转换思想很关键(怪不得是中等题目),其次是想到滑动窗口,这俩细节问题的话可以通过调试调出来。


EOF

相关文章:

【算法】滑动窗口——将x减到0的最小操作数

本节博客主要是讲的我解“将x减到0的最小操作数”这道题的思路历程&#xff0c;从最开始的想法到代码提交的详细记录&#xff0c;有需要借鉴即可。 目录 1.题目2.代码示例3.细节3.1left越界3.2特殊情况 4.总结 1.题目 题目链接&#xff1a;LINK 看题目意思是就是给你一个数X&…...

《引爆流量获客技术》实操方法,手把手教你搭建盈利流量池

[1]-先导课.mp4 [2]-第1节&#xff1a;设计客户终身价值的方法和买客户思维.mp4 [3]-第2节&#xff1a;【渠道模型】解决谁是我的客户如何找到.mp4 [4]-第3节&#xff1a;【诱饵模型】解决 如何获得更多的客户.mp4 [5]-第4节&#xff1a;【钩子模型】解决让目标客户主动找你…...

【记录】常见的前端设计系统(Design System)

解释一下设计系统的定义&#xff0c;以及在国内&#xff0c;都有那些优秀的设计系统可以学习&#xff0c;希望可以帮到大家。 什么是设计系统&#xff08;Design System)&#xff1f; 设计系统&#xff08;Design System&#xff09;是一套综合性的指导原则、组件和规则&…...

如何使用Whisper音频合成模型

Whisper 是一个通用语音识别模型&#xff0c;由 OpenAI 开发。它可以识别多种语言的语音&#xff0c;并将其转换为文本。Whisper 模型采用了深度学习技术&#xff0c;具有高准确性和鲁棒性。 1、技术原理及架构 Whisper 的工作原理&#xff1a;音频被分割成 30 秒的片段&#…...

网络相关笔记

IPv4地址 IPv4地址通常以“点分十进制”形式书写&#xff0c;即四个0-255之间的十进制数&#xff0c;各数之间用英文句点&#xff08;.&#xff09;分隔&#xff0c;例如&#xff1a;192.0.2.1。总共32位的地址空间可以表示大约42亿个不同的地址。 IPv4地址结构包括&#xff…...

由C# yield return引发的思考

前言 当我们编写 C# 代码时&#xff0c;经常需要处理大量的数据集合。在传统的方式中&#xff0c;我们往往需要先将整个数据集合加载到内存中&#xff0c;然后再进行操作。但是如果数据集合非常大&#xff0c;这种方式就会导致内存占用过高&#xff0c;甚至可能导致程序崩溃。 …...

【问题解决】EasyExcel导出数据,并将数据中的实体类url转为图片

EasyExcel导出数据&#xff0c;并将数据中的实体类url转为图片 在导出excel数据时&#xff0c;用户要求把存储二维码url转为图片保存&#xff0c;然后研究了一下具体实现。 代码展示&#xff1a; public void exportData(String pointName, String districtName, String str…...

winform植物大战僵尸

winform植物大战僵尸 植物大战僵尸源码 半成品 需要的拿去学习 登陆注册选择关卡 向日葵 豌豆射手 双枪豌豆射手 项目获取&#xff1a; 项目获取&#xff1a;typora: typora/img (gitee.com) 备用项目获取链接1&#xff1a;yifeiyixiang/kamo: 源码下载 (github.com) 备用…...

Pointnet++改进即插即用系列:全网首发UIB轻量化模块

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入UIB,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三...

【视频格式转换】【ffmepg】对mp4文件进行重新编码输出新的mp4文件

【视频格式转换】【ffmepg】对mp4文件进行重新编码输出新的mp4文件 背景 之前开发调试了个能正常调用ffmpeg解码mp4文件得到yuv数据的testbed(把ffmpeg开源库移植并交叉编译到一个嵌入式平台)&#xff0c;用了好几年了&#xff0c;今天用来挂测一批新的采集视频mp4文件&#x…...

mysql基础概念

文章目录 登录mysqlmysql和mysqld数据库操作主流数据库MYSQL架构SQL分类 登录mysql 登录mysql连接服务器&#xff0c;mysql连接时可以指明主机用-h选项&#xff0c;然后就可以指定主机Ip地址&#xff0c;-P可以指定端口号 -u指定登录用户 -P指定登录密码 查看系统中有无mysql&…...

成功案例(IF=7.3)| 转录组+蛋白质组+代谢组联合分析分析揭示胰腺癌中TAM2相关的糖酵解和丙酮酸代谢重构

研究背景 肿瘤的进展和发展需要癌细胞的代谢重编程&#xff0c;癌细胞能量代谢模式的改变可以满足快速增殖和适应肿瘤微环境的需要。肿瘤微环境&#xff08;TME&#xff09;中的代谢状态受到多种因素的影响&#xff0c;包括血管生成、与其他细胞的相互作用和系统代谢。代谢异质…...

【C++ | 函数】默认参数、哑元参数、函数重载、内联函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-04 1…...

Spring事件

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Spring⛺️稳中求进&#xff0c;晒太阳 Spring事件 简洁 Spring Event&#xff08;Application Event&#xff09;就是一个观察者模式&#xff0c;一个bean处理完任务后希望通知其他Bean的…...

mysql安装及基础设置

关系型数据库 MySQL是一种关系型数据库管理系统&#xff0c;采用了关系模型来组织数据的数据库&#xff0c;关系数据库将数据保存在不同的表中&#xff0c;用户通过查询 sql 来检索数据库中的数据。 yum 方式安装 mysql # yum -y install mysql-server # systemctl start my…...

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…...

【无标题】vue webrtc 播放rtsp视频流

最近有个小活其中有涉及播放大华及海康摄像头视频流的需求&#xff0c;经调查发现可以使用webrtc来实现相关功能&#xff0c;记录一下&#xff0c;步骤如下&#xff1a; &#xff11;、下载webrtc &#xff1a;Releases mpromonet/webrtc-streamer GitHub winows下下载&…...

redis进阶--IDEA环境

目录 一、解决redis服务器端口问题 二、java环境下使用redis 三、javaSpringt环境下使用redis 四、redis持久化 1、持久化概念 2、redis持久化策略 3、RDB策略 4、AOF策略 5、混合持久化策略 五、redis事务 1、数据库事务 2、redis事务特点 3、redis事务的作用 4…...

Llama3-Tutorial之LMDeploy高效部署Llama3实践

Llama3-Tutorial之LMDeploy高效部署Llama3实践 Llama 3 近期重磅发布&#xff0c;发布了 8B 和 70B 参数量的模型&#xff0c;lmdeploy团队对 Llama 3 部署进行了光速支持&#xff01;&#xff01;&#xff01; 书生浦语和机智流社区同学光速投稿了 LMDeploy 高效量化部署 Llam…...

SK Hynix 探索超低温技术,开启400层以上3D NAND制造新时代

随着存储技术的飞速发展&#xff0c;SK Hynix作为韩国存储巨头&#xff0c;正以前沿的制造技术引领行业变革。据韩国媒体TheElec独家报道&#xff0c;SK Hynix正积极研究在超低温条件下生产3D NAND闪存的可能性&#xff0c;此举有望助力其下一代产品突破400层的技术瓶颈&#x…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...