打卡记录
将 x 减到 0 的最小操作数(逆向思维 + 滑动窗口)
将 x 减到 0 的最小操作数,可以逆向思考,求一个数组中的最大长度的滑动窗口,来使得这个窗口里的数等于 全数组之和 - x 的值。
cpp
class Solution {
public:
int minOperations(vector<int> &nums, int x) {
int target = accumulate(nums.begin(), nums.end(), 0) - x;
if (target < 0) return -1;
int ans = -1, sum = 0, n = nums.size();
for (int i = 0, j = 0; i < n; ++i) {
sum += nums[i];
while (sum > target) sum -= nums[j++];
if (sum == target) ans = max(ans, i - j + 1);
}
return ans < 0 ? -1 : n - ans;
}
};