在C ++中重建2行二进制矩阵

假设我们具有n列2行的矩阵的以下详细信息-

  • 矩阵元素将为0或1

  • 第0(上)行的元素总和作为上限给出。

  • 第1个(较低)行的元素总和较小。

  • 第i列(索引为0)中的元素之和为colsum [i],其中colsum作为长度为n的整数数组给出。

任务是用上,下和求和重建矩阵。我们必须找到它作为2D整数数组。如果有多个有效解决方案,则将接受其中任何一个。如果没有有效的解决方案,则返回一个空的2D数组。因此,如果输入像上= 2,下= 3并且colsum是[1,1,1],那么输出将是[[1,1,0],[0,0,1]]

为了解决这个问题,我们将遵循以下步骤-

  • 设置标志:= true,n:= c的大小,使一个数组ans的顺序为2 * n

  • 当我在0到n的范围内

    • 如果c [i]> 0,则设置标志:= false

    • 如果u> l,则将u减1,ans [0,i]:= 1

    • 否则,当u <l时,将l减小1 ans [1,i]:= 1

    • 否则当c [i] = 1时

    • 如果u> 0,则将u减1,然后ans [0,i]:= 1

    • 否则l> 0,然后将l减1,然后ans [1,i]:= 1

    • 否则设置标志:= false

    • 将u和l减1

    • 如果u <0或l <0,则标志:= false

    • 将ans [0,i] = 1和ans [1,i] = 1

    • 如果c [i] = 2,则

    • 否则,如果c [i] = 1,则

    • 否则c [i] = 0

    • 否则设置标志:= false

    • 如果flag为false或u不为0或l不为0,则返回空

    • 返回ans

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>

    using namespace std;

    void print_vector(vector<vector<auto> > v){

       cout << "[";

       for(int i = 0; i<v.size(); i++){

          cout << "[";

          for(int j = 0; j <v[i].size(); j++){

             cout << v[i][j] << ", ";

          }

          cout << "],";

       }

       cout << "]"<<endl;

    }

    class Solution {

       public:

       vector<vector<int>> reconstructMatrix(int u, int l, vector<int>& c) {

          bool flag = true;

          int n = c.size();

          vector < vector <int> > ans(2, vector <int> (n));

          for(int i = 0; i < n; i++){

             if(c[i] == 2){

                u--;

                l--;

                if(u<0 || l<0)flag = false;

                ans[0][i] = 1;

                ans[1][i] = 1;

             }else if(c[i] == 1){

                if(u>l){

                      u--;

                      ans[0][i] = 1;

                }else if(u<l){

                   l--;

                   ans[1][i] = 1;

                }else{

                   if(u>0){

                      u--;

                      ans[0][i] = 1;

                   }else if(l > 0){

                      l--;

                      ans[1][i] = 1;

                   }else

                      flag = false;

                }  

             }else if(c[i] == 0){

             if(c[i]>0)flag = false;

             }else{

                flag = false;

             }

          }

          if(!flag || u!=0 ||l!=0 )return {};

          return ans;

       }

    };

    main(){

       vector<int> v = {1,1,1};

       Solution ob;

       print_vector(ob.reconstructMatrix(2,1,v));

    }

    输入值

    2

    1

    [1,1,1]

    输出结果

    [[1, 1, 0, ],[0, 0, 1, ],]

    以上是 在C ++中重建2行二进制矩阵 的全部内容, 来源链接: utcz.com/z/362189.html

    回到顶部