力扣 LeetCode 1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode) 1658. 将 x 减到 0 的最小操作数 - 给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 ,返回 最小操作数 ;否则,返回 -1 。   示例 1: 输入:nums = [1,1,4,2,3], x = 5 输出:2 解释:最佳解决方案是移除后两个元素,将 x 减到 0 。 示例 2: 输入:nums =... 思路 双指针。初始化左指针头,右指针尾。先从左指针开始求和,直到不小于x为止。然后开始循环,右指针左移直到总和不小于x,左指针左移直到总和小于x。中间要加上判断sum=x的时候更新最小步数。 代码 class Solution { public int minOperations(int[] nums, int x) { int n = nums.length; int left = 0, right = n - 1; int sum = 0; while (sum < x && left < n) { sum += nums[left++]; } if (sum < x) { return -1; } int ans = Integer.MAX_VALUE; do { while (sum < x) { sum += nums[right--]; } if (sum == x) { ans = Math.min(ans, left + n - (right + 1)); sum += nums[right--]; } while (sum > x && left > 0) { sum -= nums[--left]; } if (left > right) { break; } if (sum == x) { ans = Math.min(ans, left + n - (right + 1)); sum += nums[right--]; } } while (sum < x || left != 0 && right > 0); return ans == Integer.MAX_VALUE ? -1 : ans; } } 2 个帖子 - 2 位参与者 阅读完整话题


  • 情报分类:综合情报
  • 分类依据:内容未命中明确的垂直分类规则,归入综合情报
  • 信息来源:服务器 / LINUX DO - 最新话题
  • 发布时间:2026/9/23 09:19:51