python - 对于 NxM 数组,编写一个函数,如果用户输入是 (x,y),它应该返回从 (0,0) 到 (x,y) 的所有值的总和。其中 x<N & y<M

标签 python algorithm

我被严重困在中间。有什么建议么?我尝试了以下代码:

def getSum(A, n, m, x, y):

    res = 0

    for row in range(n + 1):
        for col in range(m + 1):

            if col <= y: 
                res += A[row][col]

    return res 

最佳答案

问题是您试图遍历整个矩阵以“过滤掉”您不需要的值。相反,你应该尝试只迭代你需要的值,在这种情况下这是可能的而不是很难。对于这些行,您只需要从行索引 0 开始至 x , 所以你会使用 for row in range(x + 1) .对于列,您必须遍历所有列(直到 m - 1 )以获取行 0x - 1并且最多为 y对于行索引 x .您可以将其计算为 last_col = m - 1 if row < x else y然后像for col in range(last_col + 1)一样迭代.然后您只需对迭代的所有值求和,因为您不需要“过滤”它们中的任何一个:

def getSum(A, n, m, x, y):

    res = 0

    for row in range(x + 1):
        last_col = m - 1 if row < x else y
        for col in range(last_col + 1):
            res += A[row][col]

    return res

注意:nm参数在函数中并不是真正必需的,我保留了它们以保持您提出的相同函数原型(prototype),但是如果由您来决定您需要哪些参数,您可以将它们排除在外。即使您需要它们,您也可以从 A 获得它们使用 len .

注意 2:我只考虑计算一组有效输入的结果的问题。请记住,在此类测试中,面试官多次想检查您如何处理错误的输入(负数、无效大小、None 等)和极端情况。

注意 3:如果您愿意,您可以在一行中完成所有操作,但老实说,这可能会更难阅读,我不确定面试官会不会喜欢这样。您也可以考虑一个中间选项。在任何情况下,上述函数体都可以浓缩为:

return sum(sum(A[row][col] for col in range(m if row < x else y + 1)) for x in range(x + 1))

关于python - 对于 NxM 数组,编写一个函数,如果用户输入是 (x,y),它应该返回从 (0,0) 到 (x,y) 的所有值的总和。其中 x<N & y<M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52299947/

相关文章:

Python3 与输入函数和 CJK 的意外视觉交互

python - 如何在 Django 中的同一个应用程序中使用不同的数据库?

python - 使用复数遍历二维数组中的邻居

c# - 以线性/均匀方式在列表 2 中分配列表 1 的不等长值

c - 如何让下面的递归更快?

python - 使用 ruamel.yaml 检索文档头部的注释

python - Pandas :将数据框插入其他数据框而不保留索引

python - 在python中的撇号之前删除额外的空间

algorithm - 在最短时间内获得所有苹果

arrays - 算法将数组拆分为子数组,其中所有子数组之间的最大总和尽可能低