• LeetCode 5518. 给定行和列的和求可行矩阵


    地址 https://leetcode-cn.com/problems/find-valid-matrix-given-row-and-column-sums/

    给你两个非负整数数组 rowSum 和 colSum ,
    其中 rowSum[i] 是二维矩阵中第 i 行元素的和, 
    colSum[j] 是第 j 列元素的和。
    换言之你不知道矩阵里的每个元素,但是你知道每一行和每一列的和。
    
    请找到大小为 rowSum.length x colSum.length 的任意 非负整数 矩阵,且该矩阵满足 rowSum 和 colSum 的要求。
    
    请你返回任意一个满足题目要求的二维矩阵,题目保证存在 至少一个 可行矩阵。
    
     
    
    示例 1:
    
    输入:rowSum = [3,8], colSum = [4,7]
    输出:[[3,0],
          [1,7]]
    解释:
    第 0 行:3 + 0 = 0 == rowSum[0]
    第 1 行:1 + 7 = 8 == rowSum[1]
    第 0 列:3 + 1 = 4 == colSum[0]
    第 1 列:0 + 7 = 7 == colSum[1]
    行和列的和都满足题目要求,且所有矩阵元素都是非负的。
    另一个可行的矩阵为:[[1,2],
                      [3,5]]
    示例 2:
    
    输入:rowSum = [5,7,10], colSum = [8,6,8]
    输出:[[0,5,0],
          [6,1,0],
          [2,0,8]]
    示例 3:
    
    输入:rowSum = [14,9], colSum = [6,9,8]
    输出:[[0,9,5],
          [6,0,3]]
    示例 4:
    
    输入:rowSum = [1,0], colSum = [1]
    输出:[[1],
          [0]]
    示例 5:
    
    输入:rowSum = [0], colSum = [0]
    输出:[[0]]
     
    
    提示:
    
    1 <= rowSum.length, colSum.length <= 500
    0 <= rowSum[i], colSum[i] <= 108
    sum(rows) == sum(columns)

    算法1
    按照题意 这是一个多元一次方程组
    这就接触到了我的知识盲区了。
    但是根据题意,所有数字为正整数,
    那么根据列和和行和中最小的数字进行矩阵元素填充尝试,
    再来推断其他元素。

    C++ 代码

    class Solution {
    public:
    
    
        int findMinIdx(vector<int>& v) {
        int idx = -1;  int minN = 100000010;
        for (int i  = 0; i < v.size(); i++) {
            if (minN > v[i] && v[i] != 0) {
                idx = i; minN = v[i];
            }
        }
    
        return idx;
    }
    
    
    
    vector<vector<int>> restoreMatrix(vector<int>& rowSum, vector<int>& colSum) {
        int rowLen = rowSum.size();
        int colLen = colSum.size();
    
        vector<vector<int>> ans(rowLen, vector<int>(colLen));
    
        while (1) {
            int i = findMinIdx(rowSum);
            int j = findMinIdx(colSum);
            if ( i !=-1 && j != -1) {
                int val = min(rowSum[i], colSum[j]);
                ans[i][j] = val;
                rowSum[i] -= val; colSum[j] -= val;
            }else{
                break;
            }
        }
    
    
        return ans;
    }
    
    
    };
    
     
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    OpenGL I420渲染(四)
    iftop查看带宽占用情况
    mysql join语句原理
    mysql查询sql及索引优化
    MySQL之索引
    IO概念和五种IO模型
    Ubuntu 14.10 下Hive配置
    Hadoop 管理工具HUE配置初始配置
    Ubuntu 15.10 下Scala 操作Redis Cluster
    Hadoop 管理工具HUE配置HBase配置
  • 原文地址:https://www.cnblogs.com/itdef/p/13768790.html
Copyright © 2020-2023  润新知