LeetCode 1658. 将 x 减到 0 的最小操作数
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1658. 将 x 减到 0 的最小操作数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 。提示:
- 1 <= nums.length <= 105
- 1 <= nums[i] <= 104
- 1 <= x <= 109
二、方法一
哈希+ 前綴和
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 的最小操作数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Postman的使用教程笔记
- 下一篇: Process finished wit