LeetCode 1658. 将 x 减到 0 的最小操作数
1658. 将 x 减到 0 的最小操作数
给你一个整数数组 nums
和一个整数 x
。每一次操作时,你应当移除数组 nums
最左边或最右边的元素,然后从 x
中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。
如果可以将 x
恰好 减到 0
,返回 最小操作数 ;否则,返回 -1
。
输入:nums = [1,1,4,2,3], x = 5
输出:2
解释:最佳解决方案是移除后两个元素,将 x 减到 0 。
输入:nums = [5,6,7,8,9], x = 4
输出:-1
输入: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 的最小操作数相关推荐
- LeetCode 1658. 将 x 减到 0 的最小操作数(哈希)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums 和一个整数 x .每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值.请注意,需要 修 ...
- Leecode 1658. 将 x 减到 0 的最小操作数 滑动窗口
原题链接:Leecode 1658. 将 x 减到 0 的最小操作数 自己写的代码: class Solution {public:int minOperations(vector<int> ...
- Leetcode-1658. 将 x 减到 0 的最小操作数
链接 1658. 将 x 减到 0 的最小操作数 题目 给你一个整数数组 nums 和一个整数 x .每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值.请注意 ...
- leetcode1658.将x见到0的最小操作数
题目大意 解题思路 分析题意,实际上是从数组的左半部分和右半部分分别取出一部分,两部分的和为x即可,找到最短的组合. 将nums从左累加,得到leftacc,将nums从右累加,得到rightacc. ...
- Leetcode 592. 分数加减运算 C++
Leetcode 592. 分数加减运算 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 ...
- LeetCode 2033. 获取单值网格的最小操作数(贪心)
文章目录 1. 题目 2. 解题 1. 题目 给你一个大小为 m x n 的二维整数网格 grid 和一个整数 x . 每一次操作,你可以对 grid 中的任一元素 加 x 或 减 x . 单值网格 ...
- 《LeetCode力扣练习》第64题 最小路径和 Java
<LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...
- 《LeetCode力扣练习》第155题 最小栈 Java
<LeetCode力扣练习>第155题 最小栈 Java 一.资源 题目: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack ...
- LeetCode 1769. 移动所有球到每个盒子所需的最小操作数(前缀和)
文章目录 1. 题目 2. 解题 1. 题目 有 n 个盒子.给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 '0' 表示第 i 个盒子是 空 的,而 boxes[i ...
最新文章
- (44)MessageBoxA 监视器(过写拷贝,不使用 shellcode 注入)
- codeforces global round 1题解搬运
- dll注入工具_UnmanagedPowerShell工具分析
- P2568-GCD【欧拉函数,欧拉筛】
- 表达式 jsp_[JSTL表达式] -JSTL中的所有,都在这
- 数据库基础:什么是MySQL?
- winform 控件没有Cursor属性时的处理办法
- 使用Stream生成菜单、地区树
- 非平稳时间序列及建模
- iphone11支持es6吗_好久没用Carplay了:IOS11导航功能不错
- 那些你所不知道的文献下载网址经验总结
- 东南电子IPO过会:应收账款8023万 美的与格力未付款
- win7原版镜像_i3-8100装Win7没有集显驱动?驱动人生告诉你为什么
- 马克飞象怎么转成html,马克飞象教程
- 宏观经济学-大题资源整理
- 大学计算机案例教程旧照片修复,破损旧照片修复教程
- 江苏法院基本解决执行难 设立全国首家环境资源法庭
- C语言-03-基本数据类型及输入输出函数
- 警惕url跳转到钓鱼网站--淘宝二手经历
- 网教9. 一夜发白《千字文》