电视台网站建设报告,西部数码 成品网站,如何在网上推广自己的公司,长春seo推广外包个人主页#xff1a;Lei宝啊
愿所有美好如期而遇 力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试#xff1f;力扣提供海量技术面试资源#xff0c;帮助你高效提升编程技能#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://le…个人主页Lei宝啊
愿所有美好如期而遇 力扣LeetCode官网 - 全球极客挚爱的技术成长平台备战技术面试力扣提供海量技术面试资源帮助你高效提升编程技能轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/description/
思路
正常来说我们需要考虑从哪边相加和为x并且还要考虑最短这样的思路光听着就不简单所以我们采用的方式是求整个数组的大小减去x得到target求一段连续的数字和为target利用双指针我们一直向后走在走的同时我们可以发现left和right只没有回退我们也就确认要使用滑动窗口也就是进出窗口判断以及更新结果。
class Solution
{
public:int minOperations(vectorint nums, int x) {int n nums.size();int sum 0;for(int i0; in; i){sum nums[i];}if(sum x)return -1;if(sum x)return n;int len 0;int target sum - x; int add 0;for(int left0, right0; rightn; right){add nums[right];while(add target){left;add - nums[left-1];}if(add target){len max(len, right-left1);} }return len 0 ? -1 : n - len;}
};