力扣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;}};