1658. 将 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 。

提示:

二、方法一

哈希+ 前缀和

class Solution {public int minOperations(int[] nums, int x) {int len = nums.length;Map<Integer, Integer> map = new HashMap<>();int[] sum = new int[len + 1];map.put(0, 0);int temp = 0;for (int i = 1; i <= len; i++) {map.put(temp = sum[i - 1] + nums[i - 1], i);sum[i] = temp;}int target = sum[len] - x;if (target < 0) {return -1;}int res = Integer.MAX_VALUE;for (int i = len; i > 0 && sum[i] >= target; i--) {if (map.containsKey(temp = sum[i] - target)) {res = Math.min(res, len - i + map.get(temp));}}return res == Integer.MAX_VALUE ? -1 : res;}
}

复杂度分析

  • 时间复杂度:O(n)。

  • 空间复杂度:O(n)。

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

  1. LeetCode 1658. 将 x 减到 0 的最小操作数(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 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. (44)MessageBoxA 监视器(过写拷贝,不使用 shellcode 注入)
  2. codeforces global round 1题解搬运
  3. dll注入工具_UnmanagedPowerShell工具分析
  4. P2568-GCD【欧拉函数,欧拉筛】
  5. 表达式 jsp_[JSTL表达式] -JSTL中的所有,都在这
  6. 数据库基础:什么是MySQL?
  7. winform 控件没有Cursor属性时的处理办法
  8. 使用Stream生成菜单、地区树
  9. 非平稳时间序列及建模
  10. iphone11支持es6吗_好久没用Carplay了:IOS11导航功能不错
  11. 那些你所不知道的文献下载网址经验总结
  12. 东南电子IPO过会:应收账款8023万 美的与格力未付款
  13. win7原版镜像_i3-8100装Win7没有集显驱动?驱动人生告诉你为什么
  14. 马克飞象怎么转成html,马克飞象教程
  15. 宏观经济学-大题资源整理
  16. 大学计算机案例教程旧照片修复,破损旧照片修复教程
  17. 江苏法院基本解决执行难 设立全国首家环境资源法庭
  18. C语言-03-基本数据类型及输入输出函数
  19. 警惕url跳转到钓鱼网站--淘宝二手经历
  20. 网教9. 一夜发白《千字文》

热门文章

  1. Android 测试之Monkey
  2. Dropout解决过拟合问题
  3. 【python】保存某个文件夹下所有图片名字到一个txt文件里
  4. 6-JS流程控制语句与数组
  5. 你头疼的ELK难题,本文几乎都解决了
  6. Gazebo機器人仿真學習探索筆記(五)環境模型
  7. 5分钟带你啃完营销著作《市场营销原理(科特勒)》,思维导图精华版
  8. PPT 图 保存为高清图片(可自定义分辨率)
  9. 微软想做apple和google的的混合体
  10. java查询neo4j_Java中使用neo4j--创建和查询