Codewars第九天–Length of missing array

41 篇文章 1 订阅

Codewars第九天–Length of missing array

题目描述:
你得到一个数组数组。
如果按长度对数组进行排序,您将看到它们的长度值是连续的。
但是缺少一个阵列!
您必须编写一个返回缺失数组长度的方法。
例如:

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值