力扣2134.最少交换次数得到连续的1(断环成链)
最终一定是所有1的个数(长度) 的区间
- 所以求所有1的和 用和作为k作滑动窗口
- 将环断成长度为n+sum-1的链
class Solution { public: int minSwaps(vector<int>& nums) { int sum = accumulate(nums.begin(),nums.end(),0); int cnt=0,n = nums.size();; cnt = accumulate(nums.begin(),nums.begin()+sum,0); int maxd = cnt; for(int i=sum;i<n+sum-1;i++) { cnt += nums[i%n] - nums[(i - sum) % n]; maxd = max(maxd,cnt); } return sum - maxd; } };