日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leecode 1658. 将 x 减到 0 的最小操作数 滑动窗口

發布時間:2023/12/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leecode 1658. 将 x 减到 0 的最小操作数 滑动窗口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原題鏈接:Leecode 1658. 將 x 減到 0 的最小操作數

自己寫的代碼:

class Solution { public:int minOperations(vector<int>& nums, int x) {int n=nums.size();if(x<nums[0] && x<nums[n-1]) return -1;vector<int> sum(n+1,0);for(int i=0;i<n;i++) sum[i+1]=sum[i]+nums[i];if(sum[n]<x) return -1;int r=1,l=n,i=1,res=INT_MAX;for(;l>=0;l--){if(sum[n]-sum[l-1]>=x) break;}for(;r<n+1;r++){if(sum[r]>=x) break;}if(sum[n]-sum[l-1]==x) res=min(res,n-l+1);if(sum[r]==x) res=min(res,r);while(i<=r && l<=n){int tmp=sum[i]+sum[n]-sum[l-1];if(tmp>x) l++;else {if(tmp==x) res=min(res,n-l+1+i);i++;}}return res==INT_MAX? -1:res;} };

參考別人的代碼:
思路:將 x 減到 0 的最小操作數(滑動窗口)

class Solution { public:int minOperations(vector<int>& nums, int x) {int n=nums.size();if(x<nums[0] && x<nums[n-1]) return -1;int sum=accumulate(nums.begin(),nums.end(),0);if(sum<x) return -1;int target=sum-x,l=0,r=0,tmp=0,res=-1;while(r<n){tmp+=nums[r++];while(tmp>target && l<n) tmp-=nums[l++];if(tmp==target) res=max(res,r-l);}return res==-1? -1:n-res;} };

總結

以上是生活随笔為你收集整理的Leecode 1658. 将 x 减到 0 的最小操作数 滑动窗口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。