Python 一个测试用例显示超出了时间限制。为什么?

Python 一个测试用例显示超出了时间限制。为什么?,python,Python,问题-给定一个0和1的m x n矩阵,如果元素为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: f

问题-给定一个0和1的m x n矩阵,如果元素为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)

这个问题没有很好地解释,因为您没有告诉测试用例是什么。但是没关系,因为你是新来的

通过谷歌搜索,我发现这是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个循环


我希望你能理解为什么你的代码能工作但效率低下。

我认为这个问题属于你,因为它不是关于你的代码不能工作,而是因为它不够快,无法解决你的问题。也许可以使用
set
数据类型作为
lk
ll
来自动消除重复。当前,如果同一行上的20个数字为零,则将同一行清除20次,每次清除一次。至于解决方案不起作用的原因,您的程序当前运行的时间复杂度更差,为O(m^2n^2),其中(m,n)是矩阵的维数。上面@JoachimIsaksson提出的建议将复杂性降低到O(mn)。先生,我已经尝试过这种方法,但这会使数组的每个元素都成为“0”。嘿,不要叫我先生:)。它可以正常工作,请复制代码并将其放入leetcode中。它应该可以工作,我刚刚检查过。如果发生错误,请告诉我