2024-04-06:用go语言,给你两个非负整数数组 rowSum 和 colSum,

其中 rowSum[i] 是二维矩阵中第 i 行元素的和,

colSum[j] 是第 j 列元素的和,换言之你不知道矩阵里的每个元素,

但是你知道每一行和每一列的和。

请找到大小为 rowSum.length x colSum.length 的任意 非负整数 矩阵。

且该矩阵满足 rowSum 和 colSum 的要求。

请你返回任意一个满足题目要求的二维矩阵,题目保证存在 至少一个 可行矩阵。

输入:rowSum = [3,8], colSum = [4,7]。

输出:[[3,0],[1,7]]。

答案2024-04-06:

来自左程云

灵捷3.5

大体步骤如下:

1.初始化一个大小为rowSum.length x colSum.length的二维矩阵ans,用于存储最终的结果。

2.遍历rowSum数组,对于每个元素rowSum[i],继续遍历colSum数组,对于每个元素colSum[j]:

  • 将ans[i][j]设为rowSum[i]和colSum[j]中的较小值,即ans[i][j] = min(rowSum[i], colSum[j])。

  • 更新rowSum[i]和colSum[j],分别减去已经分配的值ans[i][j],即rowSum[i] -= ans[i][j],colSum[j] -= ans[i][j]。

3.返回ans作为结果矩阵。

总的时间复杂度:遍历rowSum和colSum数组需要$O(n2)$的时间复杂度,其中n是rowSum和colSum的长度。因此,总的时间复杂度为$O(n2)$。

总的额外空间复杂度:额外使用了一个二维矩阵ans来存储结果,其大小为rowSum.length x colSum.length,因此总的额外空间复杂度为$O(n^2)$。

Go完整代码如下:

package main

import (
"fmt"
) func restoreMatrix(rowSum []int, colSum []int) [][]int {
n := len(rowSum)
m := len(colSum)
ans := make([][]int, n)
for i := 0; i < n; i++ {
ans[i] = make([]int, m)
for j := 0; j < m; j++ {
ans[i][j] = min(rowSum[i], colSum[j])
rowSum[i] -= ans[i][j]
colSum[j] -= ans[i][j]
}
}
return ans
} func min(a, b int) int {
if a < b {
return a
}
return b
} func main() {
rowSum := []int{3, 8}
colSum := []int{4, 7}
matrix := restoreMatrix(rowSum, colSum)
for _, row := range matrix {
fmt.Println(row)
}
}

Python完整代码如下:

# -*-coding:utf-8-*-

def restoreMatrix(rowSum, colSum):
n = len(rowSum)
m = len(colSum)
ans = [[0] * m for _ in range(n)]
for i in range(n):
for j in range(m):
ans[i][j] = min(rowSum[i], colSum[j])
rowSum[i] -= ans[i][j]
colSum[j] -= ans[i][j]
return ans def min(a, b):
if a < b:
return a
return b rowSum = [3, 8]
colSum = [4, 7]
matrix = restoreMatrix(rowSum, colSum)
for row in matrix:
print(row)

2024-04-06:用go语言,给你两个非负整数数组 rowSum 和 colSum, 其中 rowSum[i] 是二维矩阵中第 i 行元素的和, colSum[j] 是第 j 列元素的和,换言之你的更多相关文章

  1. IT公司100题-35- 求一个矩阵中最大的二维矩阵(元素和最大)

    问题描述: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 中最大的是: 4 5 9 10   分析: 2*2子数组的最大和.遍历求和,时 ...

  2. C语言数组篇(五)多级指针和二维数组指针的区别

    多级指针   以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[] --> 10个空间的数组 * p[] --> 这10个空间的数组里面存放 ...

  3. Leecode刷题之旅-C语言/python-88合并两个有序数组

    /* * @lc app=leetcode.cn id=88 lang=c * * [88] 合并两个有序数组 * * https://leetcode-cn.com/problems/merge-s ...

  4. numpy多维矩阵,取出第一行或者第一列,方法和df一样

    # 定义一个多维矩阵 arr = np.array([[1,2,3], [4,5,6], [7,8,9]]) # 取出第一行 arr[0,:] # 取出第一列 arr[:,0]

  5. 将含两列的csv文件生成二维矩阵

    gen_diea=pd.read_csv('../data/ddg_data/diea-gene.csv', header=None, names=['diease','gene']) #生成关联矩阵 ...

  6. JavaSE学习总结第06天_Java语言基础2 & 面向对象1

      06.01 二维数组概述和格式1的讲解 二维数组概述:二维数组其实就是一个元素为一维数组的数组 格式1:数据类型[][] 变量名 = new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  7. C语言之二维数组

    二维数组 还是一个数组,只不过数组中得每一个元素又是一个数组 1). 声明语法 类型 数组名[行][列]; 例:  int nums[2][3];//2行3列的二维数组,保存的数据类型是int类型 c ...

  8. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  9. C语言二维数组

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍二维数 ...

  10. 数组问题:a[i][j] 和 a[j][i] 有什么区别?

    本文以一个简单的程序开头--数组赋值: int LEN = 10000; int[][] arr = new int[LEN][LEN]; for (int i = 0; i < LEN; i+ ...

随机推荐

  1. 用Taro写一个微信小程序——版本升级

    一.升级 1.升级Taro CLI至最新版本 taro update self npm i -g @tarojs/cli 2.更新项目中 Taro 相关的依赖 taro update project ...

  2. FFmpeg开发笔记(十一):ffmpeg在移植到海思HI35xx平台之将ffmpeg库引入到sample的demo中

    前言   上一篇交叉编译了ffmpeg的海思版本,使用交叉编译的qt的ffmpeg播放器在海思上播放,本片是将ffmpeg的环境添加进海思的sample环境中.   在海思sample中引入ffmpe ...

  3. 混合类Mixins介绍

    介绍 混合类是封装了一些通用行为的基类,旨在重用代码.通常,混合类本身并没有什么用,仅扩展这种类也行不通 因为在大多数情况下,它都依赖于其它类中定义的方法和属性.通过多继承,可将混合类与其它类一起使用 ...

  4. 第132篇:npm第一次使用自己的包(package-lock.json、package.json文件作用说明)

    好家伙,   1.新建一个文件夹,命名为test   2.下载包 npm i panghu-planebattle   空白的文件夹中多了两个文件 package-lock.json和package. ...

  5. 【Azure 服务总线】Azure门户获取ARM模板,修改Service Bus的TLS版本

    问题描述 在Azure中创建Sverice Bus服务后,如果想修改服务的TLS版本,是否有办法呢? 问题解答 通过Service Bus的ARM模板,修改属性值中的 minimumTlsVersio ...

  6. 2023 年值得一读的技术文章 | NebulaGraph 技术社区

    在之前的产品篇,我们了解到了 NebulaGraph 内核及周边工具在 2023 年经历了什么样的变化.伴随着这些特性的变更和上线,在[文章]博客分类中,一篇篇的博文记录下了这些功能背后的设计思考和研 ...

  7. STL-vector模拟实现

    #pragma once #include<assert.h> #include<iostream> using std::cout; using std::endl; usi ...

  8. linux基本知识汇总2(系统编程) 60000字汇总

    /////////////进程/任务 -- task任何启动并运行程序的行为,都是由操作系统帮助我们将程序转换成进程 -- 进程:完成特定的任务 进程控制块:PCB(win) / task_struc ...

  9. 影刀rpa第一个学习项目开发所得

    1.我要在某个位置新增一条指令,但是可能没有选择好的原因,这条指令被添加到指令的最后面了,我的指令行数有几十行,然后我就要把这条指令拖动到上一屏我指定的位置上,但当我拖动指令到了当前屏最上方时,发现编 ...

  10. 深入解析ASP.NET Core MVC应用的模块化设计[上篇]

    ASP.NET Core MVC的"模块化"设计使我们可以构成应用的基本单元Controller定义在任意的模块(程序集)中,并在运行时动态加载和卸载.这种为"飞行中的飞 ...