通过值的链接展平锯齿状阵列

时间:2016-10-19 08:39:10

标签: c# arrays algorithm

给出一个锯齿状的整数数组,例如:

var arr = new int[11][] {
    new int[] { 0, 7 },
    new int[] { 1 },
    new int[] { 2, 5, 6 },
    new int[] { 3 },
    new int[] { 4 },
    new int[] { 5, 6 },
    new int[] { 6 },
    new int[] { 7, 9 },
    new int[] { 8, 10 },
    new int[] { 9 },
    new int[] { 10 }
};

如何有效地展平以生成具有按其位置顺序的项目的一维数组以及它们的值之间的链接。上面数组的输出应为:

{ 0, 7, 9, 1, 2, 5, 6, 3, 4, 8, 10 }

在此特定示例中,{ 0, 7 }{ 7, 9 }将合并,因为它们具有公共号码,7将它们链接起来。此外,还会删除{ 5, 6 }{ 6 }等重复项。

不确定它是否有足够的意义,但我也在摸不着头脑:)我希望过多的反引用和几个嵌套循环可以避免,如果可能的话,可能会使用LINQ / PLINQ或一些智能就地字符串操作。

1 个答案:

答案 0 :(得分:1)

您的示例结果可能是DAG的topological sorting(有向非循环图)的结果,其中您的子数组对形成图形边

{2,5,6}形成有向边(弧)2-> 5和5-> 6.

Topo sort也会发现可能的矛盾(周期),如{2,3},{3,5},{5,2}