classSolution { public: intminSwaps(vector<int>& nums){ int n = nums.size(); int win_size = reduce(nums.begin(), nums.end()); nums.insert(nums.end(), nums.begin(), nums.end()); int min_swap = INT_MAX; int one_count = 0;
for (int i = 0; i < n+win_size; i++) { //cout << i << endl; one_count += nums[i];
if (i < win_size-1) continue;
min_swap = min(min_swap, win_size-one_count);
one_count -= nums[i-win_size+1]; }
return min_swap; } };
灵茶山艾府的go解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
funcminSwaps(nums []int)int { tot1 := 0 for _, num := range nums { tot1 += num } cnt1, maxCnt1 := 0, 0 nums = append(nums, nums...) // 断环成链 for i, num := range nums { cnt1 += num if i >= tot1 { // 滑窗 cnt1 -= nums[i-tot1] if cnt1 > maxCnt1 { maxCnt1 = cnt1 } } } return tot1 - maxCnt1 }