You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现:返回缺失数组的长度(Codewars任务)

没问题,我来帮你梳理这个Codewars任务的解决思路,再给你写个可运行的实现方案!

问题回顾

先把任务要求明确下来:

给定一个数组的数组,将这些数组按长度排序后,其长度值为连续整数,但其中缺失了一个数组。需要编写一个方法,返回该缺失数组的长度。示例:[[1, 2], [4, 5, 1, 1], [1], [5, 6, 7, 8, 9]] --> 3。若输入的数组的数组为null/nil或空,方法需返回0;若其中存在null或空数组,方法也需返回0。

解决步骤

这类问题的核心是先处理边界异常,再解决核心计算逻辑:

  • 边界条件处理:
    • 如果输入的外层数组是null或者空数组,直接返回0
    • 遍历每个子数组,只要发现有null或者空的子数组(长度为0),也直接返回0
  • 核心计算逻辑:
    1. 提取所有合法子数组的长度,形成一个长度列表
    2. 找到这个列表的最小值min_len和最大值max_len——因为原本的长度是连续整数(仅缺一个),所以完整的连续序列范围就是从min_len到max_len
    3. 用等差数列求和公式计算完整连续序列的长度总和:(首项 + 末项) * 项数 / 2,这里的项数是max_len - min_len + 1
    4. 计算当前长度列表的总和,两者的差值就是缺失的那个长度——完整序列总和减去现有总和,刚好就是少了的那个数
代码实现(Python为例)
def find_missing_length(arr):
    # 处理输入为空或null的情况
    if not arr:
        return 0
    
    # 检查每个子数组是否合法(非null且非空)
    for sub_arr in arr:
        if sub_arr is None or len(sub_arr) == 0:
            return 0
    
    # 提取所有子数组的长度
    lengths = [len(sub) for sub in arr]
    min_len = min(lengths)
    max_len = max(lengths)
    
    # 计算预期的连续序列总和和实际总和
    expected_total = (min_len + max_len) * (max_len - min_len + 1) // 2
    actual_total = sum(lengths)
    
    # 差值就是缺失的长度
    return expected_total - actual_total
测试验证

拿题目示例测试:
输入:[[1, 2], [4, 5, 1, 1], [1], [5, 6, 7, 8, 9]]
提取的长度列表是[2,4,1,5],min为1,max为5
预期总和:(1+5)*5//2 = 15
实际总和:2+4+1+5 = 12
差值是15-12=3,和题目示例结果一致,正确。

边界情况测试:

  • 输入[]或None,返回0
  • 输入[[1], None, [2,3]],返回0
  • 输入[[], [1]],返回0

内容的提问来源于stack exchange,提问作者Michał Lewaszow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:59:03