Biweekly-contest-133

#T1 3190. 使所有元素都可以被 3 整除的最少操作数

统计不能被 0 整除的数的数量

class Solution {
public:
    int minimumOperations(vector<int>& nums) {
        int ans=0;

        for(int i=0;i<nums.size();i++){
            if(nums[i]%3!=0)
                ans+=1;
        }
        return ans;
    }
};

#T2 3191. 使二进制数组全部等于 1 的最少操作次数 I

#贪心
从左至右遍历逐个检查

class Solution {
public:
    int minOperations(vector<int>& nums) {
        int n = nums.size();
        int count = 0;
        for (int i = 0; i <= n - 3; ++i) {
            if (nums[i] == 0) {
                nums[i] = 1 - nums[i];
                nums[i + 1] = 1 - nums[i + 1];
                nums[i + 2] = 1 - nums[i + 2];
                count++;
                cout<<i<<" ";
            }
        }

        if (nums[n - 2] == 0 || nums[n - 1] == 0) {
            return -1;
        }

        return count;
    }
};

#T3 3192. 使二进制数组全部等于 1 的最少操作次数 II

#贪心
从左至右,每发现一个需要翻转的数
翻转次数+1
翻转状态翻转(因为翻转1次,后面所有的都会翻转)

class Solution {
public:
    int minOperations(vector<int>& nums) {
        int flips = 0;
        int n = nums.size();
        bool shouldBeOne = false;

        for (int i = 0; i < n; ++i) {
            if (nums[i] == shouldBeOne) {
                flips++;
                shouldBeOne = !shouldBeOne;
            }
        }
        return flips;
    }
};

#T4 3193. 统计逆序对的数目

#DP
看了题解还是不会