具体思路:
滑动窗口统计思路;
模拟没做出来;
所有1的数目,应当是最后集合1完之后的长度;
所以只需要固定窗口长度,寻找固定长度内的0的最小个数即可;
确实没有想到;
具体代码:
class Solution {
public:
int minSwaps(vector<int>& nums) {
int ones_count=0;
int n=nums.size();
for(auto ele:nums){
if(ele==1)
ones_count++;
}
int cnt=0;
int minx=INT_MAX;
int left=0;
int right=ones_count-1;
for(int i=0;i<ones_count;i++){
if(nums[i]==1)
cnt++;
}
minx=ones_count-cnt;
while(left<n){
right=(right+1)%n;
if(nums[right]==1){
cnt++;
}
if(nums[left++]==1){
cnt--;
}
minx=min(minx,ones_count-cnt);
}
return minx;
}
};