练习题 将x减到0的最小操作数

题目

给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。

如果可以将 x 恰好 减到 0 ,返回 最小操作数 ;否则,返回 -1 。

示例 1:

输入:nums = [1,1,4,2,3], x = 5
输出:2
解释:最佳解决方案是移除后两个元素,将 x 减到 0 。

示例 2:

输入:nums = [5,6,7,8,9], x = 4
输出:-1

示例 3:

输入:nums = [3,2,20,1,1,3], x = 10
输出:5
解释:最佳解决方案是移除后三个元素和前两个元素(总共 5 次操作),将 x 减到 0 。

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 104
  • 1 <= x <= 109
提交代码
//将x减到0的最小操作数//返回最小操作数
//无解操作数为-1
//x恰好减到0
//操作数其实就是两端和为x的个数
//改良后的滑动窗口
//循环尝试使用几个最左端的操作数
//连续两段元素的群体关系 #include<iostream>
#include<vector>
#include<algorithm>
using namespace std;vector<int> nums;//整数数组
int x;//目标值
int result = (int)(1e5 + 1);//最小操作数 
int n;//数组长度 //改良后的滑动窗口
void slidingWindow(){int left = 0,right = n - 1;//左右指针int res = 0;//暂时存储操作数int total = 0;//暂时存储操作数之和 if(nums[left] > x && nums[right] > x){result = -1;return;}//初始化右指针位置for(;right >= 0;){total += nums[right];res++;//右指针不可能更靠左了if(total == x){//printf("left=%d,right=%d\n",left,right);result = min(result,res);break;}else if(total > x){total -= nums[right];right++;res--;break;}right--;}//循环尝试使用几个最左端的数while(left < right){total += nums[left];res++;while(total > x){if(right < n){total -= nums[right];right++;res--;}else{res--;break;}}if(total == x){//满足条件result = min(result,res); //printf("left=%d,right=%d\n",left,right);}else if(total > x){break;}left++;}if(left >= right && right == -1){//无解 result = -1;}
} int main(){//输入整数数组  int t; while(cin.peek() != '\n'){scanf("%d",&t);nums.push_back(t);}//输入目标值scanf("%d",&x); //-------------------------------n = nums.size();//数组长度 //改良后的滑动窗口slidingWindow(); //输出结果printf("%d",result);return 0;
} 
 总结

解题思路:题目中的移除最左端和最右端的元素,本质上就是两端两段连续元素的群体关系,可以使用改良后的滑动窗口(同向双指针)。先确定从右端向左最多可以取几个元素,确定右指针的初始位置,然后循环左移左指针(左端取几个元素),右移右指针(右端少用几个元素),找合理解。注意无解的可能情况有两种,一种是拿的值加起来大于x,另一种是都拿了也不够。

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

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

相关文章

CSS常见元素类型 盒子模型

文章目录 常见元素类型块元素内联元素空元素修改元素类型测试元素类型 盒子模型标准文本流:外边距和内边距测试盒子模型 常见元素类型 块元素 常见块元素: div p h1~h6 ul li img 这些元素结束之后自带换行&#xff0c;一行只能存在一个元素&#xff0c;无法横向排列&#xf…

selenium代理ip可用性测试

测试代理ip是否工作正常&#xff0c;将正常的代理ip提取出来 from selenium import webdriver from fake_useragent import UserAgent def check_proxy(proxy):print("开始测试&#xff1a;"proxy)chrome_options webdriver.ChromeOptions()chrome_options.add_arg…

html + css + js简单的项目

以下内容直接复制粘贴就能运行 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

uniapp打包配置 (安卓+ios)

TOC 基础配置 HBuilderX中打开项目的manifest.json文件&#xff0c;在“基础配置”中可以设置App的应用名称、版本号等信息&#xff1a; 应用标识 DCloud应用appid&#xff08;简称appid&#xff09;是由DCloud创建App项目时生成的唯一标识&#xff0c;关联DCloud云端服务&…

CentOS 8.5 安装图解

特特特别的说明 CentOS发行版已经不再适合应用于生产环境&#xff0c;客观条件不得不用的话&#xff0c;优选7.9版本&#xff0c;8.5版本次之&#xff0c;最次6.10版本&#xff08;比如说Oracle 11GR2就建议在6版本上部署&#xff09;&#xff01; 引导和开始安装 选择倒计时结…

原生微信小程AR序实现模型动画播放只播放一次,且停留在最后一秒

1.效果展示 0868d9b9f56517a9a07dfc180cddecb2 2.微信小程序AR是2023年初发布&#xff0c;还有很多问提&#xff08;比如glb模型不能直接播放最后一帧&#xff1b;AR识别不了金属、玻璃材质的模型等…有问题解决了的小伙伴记得告诉我一声&#xff09; 微信官方文档地址 3.代码…

Gazebo路径配置

启动命令&#xff1a; ros2 launch gazebo_ros gazebo.launch.py 必须进行路径配置&#xff0c;否则出错。 路径配置方法&#xff0c;在~/.bashrc中添加一行 source /usr/share/gazebo/setup.sh

软件测试阶段简介_单元测试、集成测试、配置项测试、系统测试

文章目录 前言一、软件测试“V”模型二、单元测试三、集成测试四、配置项测试五、系统测试总结 前言 一般来说&#xff0c;按照软件的研制阶段划分&#xff0c;软件测试可分为单元测试、集成测试、配置项测试、系统测试等。本文将对上述各测试阶段进行逐一介绍。 一、软件测试…

免备案cdn加速服务对网站有哪些好处?-速盾网络

随着互联网的迅速发展&#xff0c;越来越多的网站需要提供高速访问服务&#xff0c;以满足用户的需求。为了提高网站的访问速度和稳定性&#xff0c;很多网站开始使用CDN&#xff08;内容分发网络&#xff09;加速服务。然而&#xff0c;由于中国互联网管理部门的政策要求&…

Redis--Zset使用场景举例(滑动窗口实现限流)

文章目录 前言什么是滑动窗口zset实现滑动窗口小结附录 前言 在Redis–Zset的语法和使用场景举例&#xff08;朋友圈点赞&#xff0c;排行榜&#xff09;一文中&#xff0c;提及了redis数据结构zset的指令语法和一些使用场景&#xff0c;今天我们使用zset来实现滑动窗口限流&a…

Python高级编程之IO模型与协程

更多Python学习内容&#xff1a;ipengtao.com 在Python高级编程中&#xff0c;IO模型和协程是两个重要的概念&#xff0c;它们在处理输入输出以及异步编程方面发挥着关键作用。本文将介绍Python中的不同IO模型以及协程的概念、原理和用法&#xff0c;并提供丰富的示例代码来帮助…

JavaEE之多线程编程:3. 线程的状态(易懂!)

文章目录 一、关于线程的状态二、观察线程的所有状态1. NEW状态2. TERMINATED状态3. RUNNABLE状态4. TIMED_WAITING 一、关于线程的状态 进程最核心的状态&#xff0c;一个是就绪状态&#xff0c;一个是阻塞状态&#xff08;对于线程同样使用&#xff09;。 以线程为单位进行调…

React入门 - 10(说一说关于 React 的一些理论 )

本章内容 目录 1、React 是一种 ”声明式“开发2、React 可与其他框架并存3、React 的”组件式“开发4、React 遵循”单向数据流“5、React 是一个用于构建”视图层“的框架6、React 采用”函数式编程“ 截止到上一节内容&#xff0c;我们就使用 React实现 TodoList的功能已经…

AOI与AVI:在视觉检测中的不同点和相似点

AOI&#xff08;关注区域&#xff09;和AVI&#xff08;视觉感兴趣区域&#xff09;是视觉检测中常用的两个概念&#xff0c;主要用于识别和分析图像或视频中的特定区域。虽然这两个概念都涉及到注视行为和注意力分配&#xff0c;但它们在定义和实际应用等方面有一些差异。 AOI…

基于SpringBoot的社区帮扶对象管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

视频生成的路线之争:基于LLMs 和 基于SD 的技术路线孰优孰劣?

Diffusion Models视频生成-博客汇总 前言:在 AI 领域,近年来各个子领域都逐渐向 transformer 架构靠拢,只有视觉生成领域一直以 diffusion 结构作为主流方向,但是近年来谷歌、Meta、华为等大厂都在尝试使用基于LLMs的结构完成视觉生成任务。相比于趋于成熟的图像生成任务,…

win10 使用wezterm替代tmux

在windows系统下&#xff0c;没有直接的tmux替代品。wezterm作为一个可高度自定义配置的终端&#xff0c;可以一定程度替代tmux&#xff0c;满足我在windows系统下替换tmux的需求。 配置wezterm&#xff0c;使其快捷键风格接近tmux。快捷键配置如下。基于该配置wezterm.lua&am…

常见的 Linux 发行版和相应的服务管理命令

一、在 Linux 系统中&#xff0c;你可以使用不同的命令来停止服务&#xff0c;具体取决于你的系统和使用的初始化系统&#xff08;init 系统&#xff09;或服务管理工具。以下是一些常见的 Linux 发行版和相应的服务管理命令&#xff1a; 1. 使用 Systemd&#xff08;大多数现…

Git教程学习:03 记录每次更新到仓库

文章目录 1 检查当前文件状态2 跟踪新文件3 暂存已修改的文件4 状态简览5 忽略文件6 查看已暂存和未暂存的修改7 提交更新8 跳过使用暂存区域9 移除文件10 移动文件 现在我们的机器上有了一个 真实项目 的 Git 仓库&#xff0c;并从这个仓库中检出了所有文件的 工作副本。 通常…