解题思路:滑动窗口
主要思想:正难逆简 题目需要左找一个数 右找一个数 我们不如直接找中间最长的一连串子数让这串子树和为 数组子树和减去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;//中间那串字串之和要为targetif(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;}
};