Skip to content
Rain Hu's Workspace
Go back

[LeetCode] 2134. Minimum Swaps to Group All 1's Together II

Rain Hu
class Solution {
public:
    int minSwaps(vector<int>& nums) {
        int n = nums.size();
        int k = accumulate(nums.begin(), nums.end(), 0);
        return min(minSwapsHelper(nums, 1, k), minSwapsHelper(nums, 0, n-k));
    }
    int minSwapsHelper(vector<int>& nums, int target, int k) {
        int n = nums.size();
        int curr = 0;
        for (int i = 0; i < k; i++) {
            if (nums[i] == target) curr++;
        }
        int cnt = curr;
        for (int i = k; i < n; i++) {
            if (nums[i] == target) curr++;
            if (nums[i-k] == target) curr--;
            cnt = max(cnt, curr);
        }
        return k - cnt;
    }
};

Share this post on:

Previous
[Leetcode] 10. Regular Expression Matching
Next
[Leetcode] 9. Palindrome Number