日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 的最小操作数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。