讨论/题目交流/🏆 第 166 场力扣周赛/
🏆 第 166 场力扣周赛

欢迎小伙伴们在这里交流分享你的参赛心得以及体验。【前往竞赛

image.png

3 分 - 整数的各位积和之差
4 分 - 用户分组
5 分 - 使结果不超过阈值的最小除数
6 分 - 转化为全零矩阵的最少反转次数

展开讨论

第四题线性方程组高斯消元法

class Solution {
public:
    void solve(vector<vector<int>>& board,vector<int>&pivot){
        int l=board.size();
        for(int j=0;j<l;j++){
            for(int i=0;i<l;i++){
                if(board[i][j]){
                    if(pivot[j]==-1){
                        if(find(pivot.begin(),pivot.end(),i)==pivot.end()){
                            pivot[j]=i;
                            i=-1;}
                        continue;
                    }else{
                        if(i!=pivot[j]){
                            for(int k=0;k<l+1;k++){
                                board[i][k]=(board[i][k]+board[pivot[j]][k])%2;
                            }
                        }
                    }
                }
            }
        }
    }
    int minFlips(vector<vector<int>>& mat) {
        int m=mat.size();
        int n=mat[0].size();
        vector<vector<int>>board(m*n,vector<int>(m*n+1,0));
        for(int k=0;k<m*n;k++){
            board[k][m*n]=mat[k/n][k%n];
            board[k][k]=1;
            if(k%n!=0)board[k][k-1]=1;
            if(k-n>=0)board[k][k-n]=1;
            if(k%n!=n-1)board[k][k+1]=1;
            if(k+n<m*n)board[k][k+n]=1;
        }
        vector<int>pivot(board.size(),-1);
        solve(board,pivot);
        if(find(pivot.begin(),pivot.end(),-1)!=pivot.end())return -1;
        int ans=0;
        for(int k=0;k<m*n;k++){
            ans+=board[k][m*n];
        }
        return ans;
    }
};
2
展开全部 22 讨论