python - 一个测试用例显示超出时间限制。为什么?
问题描述
问题 - 给定一个 0 和 1 的 mxn 矩阵,如果一个元素为 0,则将其整行和整列设置为 0。就地执行。
def value(arr):
lk=[]
ll=[]
for i in range(m):
for j in range(n):
if(arr[i][j]==0):
lk.append(i)
ll.append(j)
for ele in lk:
for j in range(n):
arr[ele][j]=0
for ele in ll:
for i in range(m):
arr[i][ele]=0
for i in range(m):
for j in range(n):
print(arr[i][j],end=' ')
print()
str=input().split()
m,n=int(str[0]),int(str[1])
arr = [[0 for j in range(n)] for i in range(m)]
value(arr)
解决方案
这个问题没有很好地解释,因为你没有告诉测试用例是什么。但这没关系,因为您是 StackOverflow 的新手。
经过一番谷歌搜索,我发现这是 leetcode 中的一个问题。首先,代码可以工作,但速度很慢。在像 leetcode 这样的竞争性编程中,您应该编写一个非常优化的代码,可以在最短的时间内解决问题。
def setZeroes(matrix):
R = len(matrix)
C = len(matrix[0])
rows, cols = set(), set()
# Essentially, we mark the rows and columns that are to be made zero
for i in range(R):
for j in range(C):
if matrix[i][j] == 0:
rows.add(i)
cols.add(j)
# Iterate over the array once again and using the rows and cols sets, update the elements
for i in range(R):
for j in range(C):
if i in rows or j in cols:
matrix[i][j] = 0
如您所见,您和建议的答案都有嵌套循环。但是建议的答案只有两个循环,而您的答案有 4 个循环。
我希望您能理解为什么您的代码有效但效率低下。
推荐阅读
- rust - 如何将 Arrayfire 数组转换为 Rust Vec?
- android - 滚动后自定义 ListView 始终未选中
- reactjs - 使用 Create React App 配置 Jest 以重置测试之间的模拟
- azure - 如何并行删除多个 Azure VM 上的自定义脚本扩展?
- node.js - 我创建了一个启用 CORS 的简单节点服务器。但是当我做 node server.js 时,它会抛出错误
- c++11 - 用大括号初始化一个类是否保证所有成员都被默认初始化?
- karate - 检查 id 对于 Karate 是否是唯一的,而不是 JS 或 Java
- parsing - Haskell 中的记录解析
- nativescript - 如何为 Apple 笔记扩展添加我的 APP
- sql-server - 在单个 SQL Server 表中批量导入 txt 文件,使用文件名作为键列