【发布时间】:2016-10-19 08:39:10
【问题描述】:
给定一个锯齿状的整数数组,例如:
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 或一些智能就地字符串操作。
【问题讨论】:
-
如果数组中存在
{ 0, 7 }和{ 7, 9 }和{ 7, 10 }怎么办? -
您对此有没有效率不高的算法?
-
这个问题没有很好的定义。有太多的情况完全不明显应该发生什么。在您的示例中,您似乎暗示可以随意重新排列子阵列以产生“更短”的结果。如果有多种重新排列方式怎么办?应该选哪一个?如果某些安排产生的结果比其他安排短怎么办?