文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个整数数组 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 <= 10^5
1 <= nums[i] <= 10^4
1 <= x <= 10^9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-operations-to-reduce-x-to-zero
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 哈希记录前缀和及其长度
  • 遍历后缀和 tailsum,在前缀和中查找 x-tailsum
class Solution {public:int minOperations(vector<int>& nums, int x) {int n = nums.size(), sum = 0;unordered_map<int,int> presum;presum[0] = 0;//前缀和为0时,长度为0for(int i = 0; i < n; i++) {sum += nums[i];presum[sum] = i+1;//前缀和对应的长度}int tailsum = 0, minlen = INT_MAX;if(presum.find(x) != presum.end())minlen = presum[x];for(int i = n-1; i >= 0; i--){tailsum += nums[i];int target = x - tailsum;if(presum.find(target) != presum.end() && presum[target] < i){minlen = min(minlen, presum[target]+n-i);}}return minlen==INT_MAX ? -1 : minlen;}
};

1088 ms 164.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1658. 将 x 减到 0 的最小操作数(哈希)相关推荐

  1. LeetCode 1658. 将 x 减到 0 的最小操作数

    1658. 将 x 减到 0 的最小操作数 给你一个整数数组 nums 和一个整数 x .每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值.请注意,需要 修改 ...

  2. Leecode 1658. 将 x 减到 0 的最小操作数 滑动窗口

    原题链接:Leecode 1658. 将 x 减到 0 的最小操作数 自己写的代码: class Solution {public:int minOperations(vector<int> ...

  3. Leetcode-1658. 将 x 减到 0 的最小操作数

    链接 1658. 将 x 减到 0 的最小操作数 题目 给你一个整数数组 nums 和一个整数 x .每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值.请注意 ...

  4. leetcode1658.将x见到0的最小操作数

    题目大意 解题思路 分析题意,实际上是从数组的左半部分和右半部分分别取出一部分,两部分的和为x即可,找到最短的组合. 将nums从左累加,得到leftacc,将nums从右累加,得到rightacc. ...

  5. Leetcode 592. 分数加减运算 C++

    Leetcode 592. 分数加减运算 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 ...

  6. LeetCode 2033. 获取单值网格的最小操作数(贪心)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个大小为 m x n 的二维整数网格 grid 和一个整数 x . 每一次操作,你可以对 grid 中的任一元素 加 x 或 减 x . 单值网格 ...

  7. 《LeetCode力扣练习》第64题 最小路径和 Java

    <LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...

  8. 《LeetCode力扣练习》第155题 最小栈 Java

    <LeetCode力扣练习>第155题 最小栈 Java 一.资源 题目: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack ...

  9. LeetCode 1769. 移动所有球到每个盒子所需的最小操作数(前缀和)

    文章目录 1. 题目 2. 解题 1. 题目 有 n 个盒子.给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 '0' 表示第 i 个盒子是 空 的,而 boxes[i ...

最新文章

  1. 多分类f1分数_如何计算多标签分类中的F1测度?
  2. python 浏览器显示本地文件夹_从浏览器中打开本地文件文件夹
  3. 位运算及在java中的应用整理
  4. MySQL利用xtrabackup进行增量备份详细过程汇总
  5. php中cookie的用法
  6. WinForm 捕获最小化事件
  7. Linkis EngineConnPlugin引擎插件安装文档
  8. 3520a SDL_tff库做bmp 也就是osd
  9. 白盒测试之初识gtest工具
  10. v4l2驱动框架_【干货分享】Xilinx Linux V4L2视频管道(Video Pipeline)驱动程序分析...
  11. php多少内置函数,php有多少个内置函数
  12. 推荐系统之CTR预估-FNN模型解析
  13. webrtc 渲染_WebRTC 开发(六)摄像头采集与视频渲染分析
  14. 快速傅立叶变换_FFT
  15. 微信H5支付 以及退款
  16. 工作3年进阿里,取得P7职位,需要怎样的技术能力?(面试题附答案)
  17. 一起来学linux:网络命令
  18. English:英语学习口诀(实用)
  19. QT 主线程子线程互相传值
  20. 图像处理 图像相似算法aHash、dHash、pHash解析与对比

热门文章

  1. 实数是不是python数据类型_python 基本数据类型
  2. 删除github上的commit历史记录
  3. java后期发展方向_Java程序员的4个职业发展方向,该如何把握黄金5年?
  4. Java IO 系统
  5. LeetCode872. Leaf-Similar Trees
  6. plsql 中的一些好的设置和快捷键总结
  7. App接口如何保证安全
  8. Yslow-23条规则
  9. flash加xml图片叠加焦点图,左右箭头翻页
  10. RDLC报表其余空白页问题