You need to enable JavaScript to run this app. 如何用C#实现已排序整数数组的连续子数组分组(编程挑战)
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#实现已排序整数数组的连续子数组分组(编程挑战)

实现核心逻辑

由于输入本身是已排序的整数数组,无需额外执行排序操作,分组的核心判定规则非常直接:遍历数组元素时,只要当前元素与上一个元素的差值恰好为1,就将其归入当前连续子数组;只要差值不为1,就闭合当前子数组,开启新的连续分组。
实现过程中需要覆盖几类基础边界场景:

  • 空数组/Null输入的兼容处理
  • 单元素输入的返回逻辑
  • 遍历结束后,最后一个未闭合临时分组的落盘处理
具体C#实现代码
public static int[][] SplitSortedArrayIntoConsecutiveGroups(int[] sortedInput)
{
    // 兼容空输入边界
    if (sortedInput == null || sortedInput.Length == 0)
    {
        return Array.Empty<int[]>();
    }

    var result = new List<int[]>();
    // 临时存储当前正在构造的连续分组
    var currentGroup = new List<int> { sortedInput[0] };

    // 从第二个元素开始遍历全数组
    for (int i = 1; i < sortedInput.Length; i++)
    {
        int currentValue = sortedInput[i];
        // 取当前分组的最后一个元素做连续值判定
        int lastValueInGroup = currentGroup[^1];

        if (currentValue == lastValueInGroup + 1)
        {
            currentGroup.Add(currentValue);
        }
        else
        {
            // 不连续则将当前分组存入最终结果,重置临时分组
            result.Add(currentGroup.ToArray());
            currentGroup = new List<int> { currentValue };
        }
    }

    // 遍历结束后存入最后一个剩余的分组
    result.Add(currentGroup.ToArray());

    return result.ToArray();
}

注:如果使用低于C# 8.0的版本,需要将代码中取索引的语法currentGroup[^1]替换为currentGroup[currentGroup.Count - 1]即可正常运行。

效果验证

针对题目给出的测试用例:

  • 输入排序数组:[1, 2, 3, 5, 6, 8, 9, 10]
  • 调用方法后输出结果:[[1, 2, 3], [5, 6], [8, 9, 10]],与预期完全匹配。

其他常见场景的返回结果:

  • 输入[1,3,5,7](无相邻连续值):输出[[1], [3], [5], [7]]
  • 输入[2,3,4,5,6](全元素连续):输出[[2,3,4,5,6]]
  • 输入[10](单元素输入):输出[[10]]
  • 输入[1,2,2,3](存在重复元素):严格按照“后值比前值大1才算连续”的规则,输出[[1,2], [2,3]]

内容的提问来源于stack exchange,提问作者mortis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 18:06:04