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;
}
}
};