将x减到零的最小操作数问题

 欢迎跳转我的主页:羑悻的小杀马特-CSDN博客

目录

一·题目简述:

二·题目思路:

三·解答代码:


一·题目简述:

leetcode题目链接:. - 力扣(LeetCode) 

二·题目思路:

首先这道题,可能如果直接正面从最左最右开始找数值之和为x,这样看起来比较散,而我们不难发现中间肯定会有一段连续的区域,因此leetcode这道题肯定想让我们用这种逆向的思维方式来解决。

因此这道题不就转换成了让我们找中间的区域等于sum-x的最长区间。

因此回归正轨,也就是下面要用滑动窗口来维护,而窗口内的数据就是这段区域的和,然后可以控制这段窗口保持总值为sum-x,那么我们就开始更新数据,并统计最大值,下面来用画图的方式演示一下(我们例子就不一一列举了,举几个有代表性的即可):

我们用视频动态展示一下操作:

演示效果

接着可能会有一个疑问:

 

 

下面可能会有两个特殊情况,这就简单说一下,也就是它要返回-1的情况:

比如是[1,2] x=8,则target就是负数,这样直接返回-1;

另一种就是类似[2,3] x=1 ,这时虽然target>0但是当缩小窗口的时候会发现,它不会等于target即要保存的ret不会更新,故到最后直接返回ret即可。

也许会看到题目有个限制就是:

这里为什么要是正数,这里我们举个例子:

加入:[-1,-7,5,1] x=1, target=-3; 但是这样会出现和都为正数时候target<0,也就会直接返回-1,因此会出现矛盾,题目规定不能是负数。 

 

最后规整一下思路: 

思路:滑动窗口+逆向思维:(转成找中间连续区域的值等于sum-x的最长区间元素个数)即要保证tmp不能大于target,一开始直接进窗口,tmp>target就开始出

窗口,即left朝右活动,开始对tmp开始减小,此时出了while可能会发现小于或者等于,而需要的是等于,故等于的时候开始用max统计,最后for后完成相应的输出操作

注意:两极端:target小于0,直接返回-1,否则后面进数组,会发生栈溢出行为,另一种是target虽然大于0,但是后面无论如何也不会到更新ret环节,故后面直接

返回-1;

三·解答代码:

class Solution {
public:int minOperations(vector<int>& nums, int x) {int sum=0,n=nums.size();for(auto a :nums){sum+=a;}//极端1:[1,2] x=8;此时target<0;int target=sum-x;if(target<0) return -1;//中间最长区间的值应该等于targetint ret=-1;for( int left,right=0 ,tmp=0;right<n;right++){tmp+=nums[right];//一开始直接入窗口while(tmp>target)//窗口过大就左端出窗口tmp-= nums[left++];if(tmp==target){ret=max(ret,right-left+1);//符合就出窗口后更新}// 极端2:[2,3] x=1;target>0;但是出窗口后得不到tmp==target;}if(ret==-1)  return ret;else return n-ret;         }
};

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

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

相关文章

STM32(F103ZET6)第十九课:FreeRtos的移植和使用

目录 需求一、FreeRtos简介二、移植FreeRtos1.复制代码2.内存空间分配和内核相关接口3.FreeRtosConfig4.添加到工程中三、任务块操作1.任务四种状态2.创建任务过程 需求 1.将FreeRtos&#xff08;嵌入式实时操作系统&#xff09;移植到STM32中。 2.在该系统中实现任务的创建、…

git 更改分支名称

1. 本地分支重命名&#xff08;还未推送到远程&#xff09; 1、修改当前分支名称 git branch -m 新分支名称2、修改其他分支名称 git branch -m 旧分支名称 新分支名称2. 远程分支重命名&#xff08;已推送远程&#xff09; 1&#xff09;重新命名远程分支对应的本地分支 …

86、pod部署策略

一、集群的调度 集群的调度&#xff1a; 怎么把pod部署到节点的方法。 1.1、调度的过程&#xff1a; scheduler是集群的调度器&#xff0c;主要任务就是把pod部署到节点上。 1.2、自动调度&#xff1a; 1、公平&#xff0c;保证每个可用的节点都可以部署pod 2、资源的高…

【生日视频制作】黑板写文字美女跳舞2版AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程黑板写文字美女跳舞2版AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板替换工程 怎么如何做的【生日视频制作】黑板写文字美女跳舞2版AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导…

有向无环图的关联矩阵及其矩阵乘积的含义

有向无环图的关联矩阵及其矩阵乘积的含义 引言关联矩阵的定义矩阵乘积 B B T BB^T BBT的含义伪代码示例C代码示例结论引言 在计算机科学和数学中,有向无环图(Directed Acyclic Graph, DAG)是一种常见的数据结构,广泛应用于各种算法中,如拓扑排序、动态规划等。在有向无环…

10、Django Admin修改标题

admin from django.contrib import admin from .models import Category, Origin, Hero, Villain # 添加以下代码 admin.site.site_header "系统管理" admin.site.site_title "管理员界面" admin.site.index_title "欢迎来到这里&#xff…

网络模型及协议介绍

一.OSI七层模型 OSI Open System Interconnect 开放系统互连模型 以前不同厂家所生产的网络设备的标准是不同的&#xff0c;所以为了统一生产规范就制定了OSI这个生产模型。 作用&#xff1a;降低网络进行数据通信复杂度 这个模型的作用第一降低数据通信的复杂度&#xff…

QT cmake vscode 构建流程

采用基于QT creater方式实现&#xff1a; 1. Qt Creator——创建项目——Qt Widgets Application——CMake——Desktop Qt 6.8.0 MSVC2022 64bit——接下来全默认 关键点是选择CMake和构建套件这里用windows的MSVC。 2. 用vscode打开&#xff0c;即可。 可以配置一个调试任务…

【html】编辑器、基础、属性、标题、段落、格式化、 连接、头部、CSS、图像

目录 2.HTML编辑器 3.HTML基础 3.1 HTML标题 3.2 段落 4.HTML元素 4.1 元素语法 4.2 嵌套元素 4.3 HTML空元素 4.4 HTML提示&#xff0c;使用小写标签 5.HTML属性 5.1 属性实例 5.2 HTML 属性常用引用属性值 5.3 使用小写属性 5.4 HTML属性参考手册 6.HTML标题 6.1 HTML水…

JAKA学习2:博途组态配置PROFINET和MODBUS

目录 一、GSD文件安装与设备组态1.1、GSD安装1.2、PROFINET设备组态二、远程启动顺序2.1、启动步骤2.2、安全点配置三、JAKA配置3.1、输入输出点配置一、GSD文件安装与设备组态 1.1、GSD安装 1.2、PROFINET设备组态 二、远程启动顺序 2.1、启动步骤 1、 要保证DO9已开机状态…

驾驭Python与MySQL的桥梁:pymysql的神秘面纱

文章目录 **驾驭Python与MySQL的桥梁&#xff1a;pymysql的神秘面纱**背景&#xff1a;为何选择pymysql&#xff1f;库的简介安装指南简单的库函数使用方法场景应用常见问题与解决方案总结 驾驭Python与MySQL的桥梁&#xff1a;pymysql的神秘面纱 背景&#xff1a;为何选择pym…

赛码网牛客在acm模式下利用node.js处理多行输入方法

赛码网在JS Node的语言下&#xff0c;acm模式的默认标准输入输出代码是这样的&#xff1a; const readline require(readline);const rl readline.createInterface({input: process.stdin,output: process.stdout }); rl.on(line, function (line) {const tokens line.spli…

java重点学习-redis

一.redis 穿透无中生有key&#xff0c;布隆过滤nul隔离 锁与非期解难题。缓存击穿过期key&#xff0c; 雪崩大量过期key&#xff0c;过期时间要随机。 面试必考三兄弟&#xff0c;可用限流来保底。 1.1 Redis的使用场景 根据自己简历上的业务进行回答 缓存穿透、击穿、雪崩、双…

实验报告: lookie-lookie 项目测试与分析

目录 一、实验目的 二、实验环境 三、实验步骤 1. 下载与准备项目 1.1 从 GitHub 获取项目 1.2 查看项目文件结构 2. 运行项目 2.1 启动项目 2.2 浏览器设置 3. 项目体验 3.1 功能测试 3.2 运行截图 4. 文件结构分析 4.1 总体结构 4.2 主要文件和目录说明 5. 数…

重头开始嵌入式第三十二天(TCP多客户端模型)

1.多路IO 1.select #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <netine…

基于人体关节夹角的人体动作识别算法(代码+数据集)

为此本文提出了一个基于人体关节夹角的人体动作识别算法&#xff0c;主要做了以下工作&#xff1a; &#xff08;1&#xff09;提出了一个可解释性强&#xff0c;耗费算力较少且鲁棒性较高的基于人体关节夹角的人体动作序列的特征抽取方法。 &#xff08;2&#xff09;本文所使…

PCL 移动立方体三维重建——RBF算法【2024最新版】

目录 一、算法原理1、算法概述2、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接,首发于:2024年9月1日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法概述 该算法实现的是Reconstruction a…

单片机配置导入导出功能设计(一种思路)

背景&#xff1a; 为了方便部分不开放到屏幕的配置进行修改&#xff0c;兼容离线机器&#xff0c;也支持产线大批量配置导入&#xff0c;提高生产效率&#xff0c;特此研发配置导入导出功能。 原理&#xff1a; 上电监测到U盘和文件系统正常后&#xff0c;监测是否存在配置文件…

贸易术语你都不懂,你还做什么外贸

外贸小伙伴们&#xff0c;连贸易术语都不懂&#xff0c;还做啥外贸&#xff1f;别担心&#xff0c;今天我给大家整理了常见的外贸贸易术语&#xff0c;让你轻松入门&#xff0c;快速上手&#xff01; 1、FOB: Free On Board 船上交货价。按离岸价进行的交易&#xff0c;买方…

Java并发线程 共享模型之管程 5

1. 生产者消费者 package cn.itcast.testcopy;import cn.itcast.n2copy.util.Sleeper; import lombok.extern.slf4j.Slf4j;import java.util.LinkedList;/*** ClassName: Test21* Package: cn.itcast.testcopy* Description: 生产者消费者** Author: 1043* Create: 2024/9/4 - …