https://leetcode.com/problems/minimum-operations-to-reduce-x-to-zero/descriptio
1658. Minimum Operations to Reduce X to Zero
给你一个阵列 nums 和一个数字 x ,我们每次可以从阵列的最左或最右拿出一个数字
加总并移除该数字,求出最少移除几个数字后相加会恰好等于 x,如果无法等于 x 返回
-1。
思路:
1.元素只能从阵列的左边和右边拿,有拿的部分:left + right,其他部分: mid
nums = [left][mid][right]。
2.我们需要让 [left] 和 [right] 相加等于 x 且两者长度尽可能小,也就是中间
部分 [mid] 尽可能大。
3.因为 [left] + [right] = x 且 nums = [left] + [mid] + [right] 所以
[mid] = nums - x,我们可以先用左式把 mid 初始化,如果 [mid] < 0 表示
所有元素相加小于 x,可以直接返回。
4.用滑动窗口的技巧不断加入元素,如果当前窗口的值 > [mid] 就把左边的元素
从窗口 pop,如果窗口的值等于 [mid] 就更新结果值。
(nums 长度减去 [mid] 长度)
5.返回结果。
Java Code: