2024-04-06:用go语言,给你两个非负整数数组 rowSum 和 colSum, 其中 rowSum[i] 是二维矩阵中第 i 行元素的和, colSum[j] 是第 j 列元素的和,换言之你
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:
来自左程云。
大体步骤如下:
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 列元素的和,换言之你的更多相关文章
- IT公司100题-35- 求一个矩阵中最大的二维矩阵(元素和最大)
问题描述: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 中最大的是: 4 5 9 10 分析: 2*2子数组的最大和.遍历求和,时 ...
- C语言数组篇(五)多级指针和二维数组指针的区别
多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[] --> 10个空间的数组 * p[] --> 这10个空间的数组里面存放 ...
- Leecode刷题之旅-C语言/python-88合并两个有序数组
/* * @lc app=leetcode.cn id=88 lang=c * * [88] 合并两个有序数组 * * https://leetcode-cn.com/problems/merge-s ...
- numpy多维矩阵,取出第一行或者第一列,方法和df一样
# 定义一个多维矩阵 arr = np.array([[1,2,3], [4,5,6], [7,8,9]]) # 取出第一行 arr[0,:] # 取出第一列 arr[:,0]
- 将含两列的csv文件生成二维矩阵
gen_diea=pd.read_csv('../data/ddg_data/diea-gene.csv', header=None, names=['diease','gene']) #生成关联矩阵 ...
- JavaSE学习总结第06天_Java语言基础2 & 面向对象1
06.01 二维数组概述和格式1的讲解 二维数组概述:二维数组其实就是一个元素为一维数组的数组 格式1:数据类型[][] 变量名 = new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- C语言之二维数组
二维数组 还是一个数组,只不过数组中得每一个元素又是一个数组 1). 声明语法 类型 数组名[行][列]; 例: int nums[2][3];//2行3列的二维数组,保存的数据类型是int类型 c ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- C语言二维数组
上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍二维数 ...
- 数组问题:a[i][j] 和 a[j][i] 有什么区别?
本文以一个简单的程序开头--数组赋值: int LEN = 10000; int[][] arr = new int[LEN][LEN]; for (int i = 0; i < LEN; i+ ...
随机推荐
- Navicat 12连接mysql8.x报错2059 - authentication plugin 'caching_sha2_password' 解决办法
// %表示远程连接允许所有ip,如果只是连接本地,将%改为localhost即可 ALTER USER 'root'@'%' IDENTIFIED BY '你自己的mysql的密码' PASSWOR ...
- Oracle设置日志参数-ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
要实现两个数据库之间的实时同步,需要给Oracle设置参数 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; -- 执行了12小时,等待数据库中的其它事务都提交以后才 ...
- Xilinx GTH 简介 ,CoaXpress FPGA PHY 部分
什么是GTH GTH 是Xilinx UltraScale系列FPGA上高速收发器的一种类型,本质上和其它名称如GTP, GTX等只是器件类型不同.速率有差异:GTH 最低速率在500Mbps,最高在 ...
- 关于“非法的前向引用(illegal forward reference)”的探究
1.问题: 有如下代码: public class Test { static { i = 0;// 给变量赋值可以正常编译通过 System.out.print(i);// 编译器会提示" ...
- STL-vector模拟实现
#pragma once #include<assert.h> #include<iostream> using std::cout; using std::endl; usi ...
- Python实现企业微信自动打卡程序二:跳过节假日,随机打卡时间,定时任务,失败通知
一.介绍 在上节 Python实现企业微信上下班自动打卡程序内容之后,我们继续优化自动打卡程序.接下来增加如下内容: 实现打卡时间随机范围 处理节假日不打卡的情况 实现定时调度打卡 打卡成功或失败通知 ...
- Elasticsearch 如何保证写入过程中不丢失数据的
丢失数据的本质 在本文开始前,首先明白一个点,平时我们说的组件数据不丢失究竟是在指什么,如果你往ES写入数据,ES返回给你写入错误,这个不算数据丢失.如果你往ES写入数据,ES返回给你成功,但是后续因 ...
- CYQ.Data 操作 Redis 性能测试:对比 StackExchange.Redis
前言: 前几天,点开自己的博客,看了一下 CYQ.Data V5系列 都有哪些文章, 发现了一篇2019年写的:CYQ.Data 对于分布式缓存Redis.MemCache高可用的改进及性能测试,于是 ...
- 【刷题】LeetCode 239 滑动窗口最大值- Python手撕最大堆
手撕版 最大堆的完全实现, 堆中元素为二元组(num, idx),比较时用数值,赋值或交换时用整个元组. class Heap: def __init__(self, arr, capacity): ...
- Jetpack架构组件学习(0)——总结篇
原文地址:Jetpack架构组件学习(0)--总结篇 | Stars-One的杂货小窝 对之后学习的Jetpack架构开发优点进行简单总结,及对应的文章分类链接 LifeCycle 主要解决将一些初始 ...