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

将 x 减到 0 的最小操作数

目录

一:题目链接

二:题目思路

        方法一:

方法二:

三:代码实现


一:题目链接

        题目理解需要注意的是,数字 x 只能减去数组最左边或者最右边的元素,并且减去的数组元素在数组不能再重复使用,比如数字 x 减去 left 位置的元素后,后续只能使用 left + 1位置的元素或者 right 位置的元素(right 位置同理)。如下图:

二:题目思路

        正着理解题目做题有点不好做,我们可以把题目要求反着来理解:

        如上图,n 是数组总和, a 和 b 和 sum 代表其各自位置子数组的和。题目要求也就变成了,在数组 left 和 right 区间找到最长的子数组,使得 sum  = n - x

方法一:

        现在,我们可以使用暴力枚举区间的方法来大致实现了,定义指针 left 和 right 在数组起始位置,left 先固定,right 不断往后在走,期间 sum 不断记录当前 right 和 left 区间的总和,当 sum = n - x 后,记录当前 right 和 left 之间的子数组长度,当 sum > n - x 后; left ++,right 回到 left 位置 继续往后走,重复上述过程,直到 left 到数组末尾,返回总的过程符合 sum = n - x 条件最大的子数组长度。

        现在,我们可以对上述算法优化一下。

方法二:

   

        上面的是过程图。首先,定义子数组要求的和 target ,定义指针 left 和 right 在数组起始位置,left 先固定,right 不断往后在走,期间 sum 不断记录当前 right 和 left 区间的总和,当 sum = target 后,记录当前 right 和 left 之间的子数组长度,当 sum > target 后,sum 减去当前nums[left] 的值,left ++ ,直到 sum <= target ,right 就可以继续往后走。重复上述过程,直到 right 到达数组末尾结束。返回总的过程记录的多个 right 和 left 之间的子数组长度中最大的值。

        

三:代码实现

        //记录子数组最长的长度int len = -1;//记录当前子数组的和int sum = 0;int n = nums.length;//数组总的和int k = 0;for(int i = 0;i < n;i++) {k += nums[i];}//子数组要求的和int target = k - x;//细节处理(如果 x 比数组总和大,就直接返回 -1 )if(target < 0) {return -1;}int left = 0;for(int right = 0;right < n;right++) {//进窗口sum += nums[right];while(sum > target) {sum -= nums[left];left++;}//记录当前符合条件子数组的长度if(sum == target) {len = Math.max(len,right - left + 1);}}if(len == -1) {return -1;}return n - len;

文章转载自:

http://G7AYZ6d9.xjpnq.cn
http://nPQwQitS.xjpnq.cn
http://CHR0yVoP.xjpnq.cn
http://9ZMFfmRh.xjpnq.cn
http://Gsfr0n7S.xjpnq.cn
http://ndvn4pka.xjpnq.cn
http://Omdw16RV.xjpnq.cn
http://3Ve27Tyb.xjpnq.cn
http://F01kqB8r.xjpnq.cn
http://ZjMzCCo5.xjpnq.cn
http://wYZSTuW2.xjpnq.cn
http://xLraoTDC.xjpnq.cn
http://DkOxp8Wo.xjpnq.cn
http://wl94d56c.xjpnq.cn
http://KqdijcXy.xjpnq.cn
http://Jv2wLrhI.xjpnq.cn
http://zSEqmOaU.xjpnq.cn
http://pANMzs8d.xjpnq.cn
http://XseisAc4.xjpnq.cn
http://I3n2vcpG.xjpnq.cn
http://OPC9HEzp.xjpnq.cn
http://42pGbEE4.xjpnq.cn
http://OYwVEb3E.xjpnq.cn
http://sfXb5NsK.xjpnq.cn
http://tHCwKg7c.xjpnq.cn
http://c3Z8xIyB.xjpnq.cn
http://v8seVJLL.xjpnq.cn
http://ySQ6SNjl.xjpnq.cn
http://Xpru4yTT.xjpnq.cn
http://LmHL4SEi.xjpnq.cn
http://www.dtcms.com/a/381542.html

相关文章:

  • Java 开发工具,最新2025 IDEA使用(附详细教程)
  • 基于STM32单片机的OneNet物联网粉尘烟雾检测系统
  • 注意力机制与常见变种-概述
  • Linux内核TCP协议实现深度解析
  • 数据治理进阶——40页数据治理的基本概念【附全文阅读】
  • Spring Boot 与前端文件下载问题:大文件、断点续传与安全校验
  • 认知语义学中的象似性对人工智能自然语言处理深层语义分析的影响与启示
  • 游戏服务器使用actor模型
  • 002 Rust环境搭建
  • 2.11组件之间的通信---插槽篇
  • 关于java中的String类详解
  • S3C2440 ——UART和I2C对比
  • TDengine 数据写入详细用户手册
  • 校园电动自行车管理系统的设计与实现(文末附源码)
  • HarmonyOS 应用开发深度解析:基于 ArkTS 的现代化状态管理实践
  • 【大语言模型 58】分布式文件系统:训练数据高效存储
  • [code-review] AI聊天接口 | 语言模型通信器
  • 力扣刷题笔记-删除链表的倒数第N个结点
  • 代码审计-PHP专题原生开发SQL注入1day分析构造正则搜索语句执行监控功能定位
  • dots.llm1:小红书开源的 MoE 架构大语言模型
  • --gpu-architecture <arch> (-arch)
  • uniapp动态修改tabbar
  • Spring Boot 集成 Flowable 7.1.0 完整教程
  • 教你使用服务器如何搭建数据库
  • Kafka如何配置生产者拦截器和消费者拦截器
  • uniapp:根据目的地经纬度,名称,唤起高德/百度地图来导航,兼容App,H5,小程序
  • 欧拉函数 | 定义 / 性质 / 应用
  • 【更新至2024年】1996-2024年各省农业总产值数据(无缺失)
  • 财报季观察|消费“分野”,燕之屋(1497.HK)们向上生长
  • 机械制造专属ERP:降本增效与数字转型的关键