解题思路:滑动窗口
主要思想:正难逆简 题目需要左找一个数 右找一个数 我们不如直接找中间最长的一连串子数让这串子树和为 数组子树和减去X 找不到就返回 -1
滑动窗口双指针从左端出发,进行 进窗口 判断 出窗口 更新结果四个步骤
代码如下
class Solution {
public:
int minOperations(vector<int>& nums, int x)
{
int left=0,right=0,sum=0,ret=-1;
for(auto i:nums)
{
sum+=i;
}
int target=sum-x;//中间那串字串之和要为target
if(target<0) return -1;
sum=0;
for(;right<nums.size();right++)
{
sum+=nums[right];//进窗口
while(sum>target)//判断
{
sum-=nums[left++];//出窗口
}
if(sum==target)
{
ret=max(ret,right-left+1);
}
}
if(ret==-1)
{
return ret;
}
return nums.size()-ret;
}
};