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

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

🟡 中等

https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/description/

和[5-1423可获得最大点数](../01 双指针/LeetCode 1423 可获得最大点数.md) 类似,但是这里是求长度,可以用滑动窗口求内部连续的和和 sum-x 的大小。

class Solution {

public:

    int minOperations(vector<int>& nums, int x) {

        int all_sum = accumulate(nums.begin(),nums.end(),0);

        int target = all_sum-x;

        int left = 0;

        int res = -1;

        if(target<0) return -1;

        int sum =0;

        for(int i = 0;i<nums.size();i++){

            sum+=nums[i];

            while(sum>target&&left<=i){

                sum-=nums[left];

                left++;

            }

            if(sum==target){

                res = max(res,i-left+1);

            }

        }

        if(res==-1){

            return -1;

        }else{

            return nums.size()-res;

        }

    }

};