本文共 1370 字,大约阅读时间需要 4 分钟。
题目描述:
你得到一个数组数组。 如果按长度对数组进行排序,您将看到它们的长度值是连续的。 但是缺少一个阵列! 您必须编写一个返回缺失数组长度的方法。 例如:Example:[[1, 2], [4, 5, 1, 1], [1], [5, 6, 7, 8, 9]] --> 3
如果数组数组为null / nil或为空,则该方法应返回0。
当数组中的数组为null或为空时,该方法也应返回0!
总会有一个缺少的元素,它的长度总是在给定的数组之间。 代码如下:这里开始困扰我的是数组合法性判断,后来发现值需要使用一个bool(i)
就可以判断数组的合法性了。 这里将输入中的每一个数组的长度存入一个列表中并排序,然后判断哪一个数不在列表中即可。 这样会多使用一个列表,同时有两个for
循环。挺复杂的。通过了所以的测试用例。 def get_length_of_missing_array(array_of_arrays): len_array = [] if len(array_of_arrays) == None: return 0 else: for i in array_of_arrays: if bool(i) != True: return 0 else: len_array.append(len(i)) len_array = sorted(len_array) if len(len_array) == 0: return 0 else: for j in range(len_array[0], len_array[-1]): if j not in len_array: return j
查看别人的solution
后发现了一个最聪明的嘴阀,如下,两行代码就可以解决该问题。
all()
函数:all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。 用于判断数组的合法性。 然后使用了一个map()
函数对每一个数组进行求长度。同样的存入一个数组lns
中。 最后判断lns
的合法性。他求解的方法是将lns
应该存在的所以数组的长度进行求和再减去缺失的。这样就可以直接得到结果。避免了for
循环。 元素除了是 0、空、FALSE 外都算 TRUE。
def get_length_of_missing_array(a): lns = a and all(a) and list(map(len, a)) #list(map(len,a))可以直接构建一个a中每一个数组长度的列表。 return bool(lns) and sum(range(min(lns), max(lns) + 1)) - sum(lns)
转载地址:http://fqmws.baihongyu.com/