leetcode 5977. 最少交换次数来组合所有的 1 II


 1 class Solution {
 2 public:
 3     int minSwaps(vector<int>& nums) {
 4         int n=nums.size(),sum1=0;
 5         for(auto &p:nums)if(p)sum1++;
 6         for(int i=0;i)nums.push_back(nums[i]);
 7         int l=0,r=0,mx=0,cnt1=0;
 8         while(l<n)
 9         {
10             if(r1)cnt1++;
11             while(r-l+1>sum1)
12             {
13                 if(nums[l]==1)cnt1--;
14                 l++;
15             }
16             if(r-l+1==sum1) mx=max(cnt1,mx);
17             r++;
18         }
19         return sum1-mx;
20     }
21 };

相关