你有一组数字。 a1, a2, a3, a4, ..., an
。这些数字是随机的,可能会重复。
按顺序排列数字x1 > x2 < x3 > x4 < x5 > x6 ...
。
x1
与x3, x4, x5, ...
没有任何关系,x2
与x4, x5,...
没有任何关系,x3
与x1, x5, x6,...
没有任何关系,因此上。
对于这个问题,可能有许多可行的解决方案,看到最终答案可以达到其中任何一个。如果输入类似于22,22,22
,那么它应该输出“无可行解决方案”的消息,但是对于像7 7 7 3 3
这样的输入,它应该打印出如下的解决方案:7 3 7 3 7
。
我的解决方案是首先按O(nlogn)对输入数组进行排序,然后用最后一个未接触的元素填充输出数组,然后用第一个未触摸的元素填充输出数组,总体为O(nlogn)。我们能做得更好吗?如何跟踪不可行的解决方案?
答案 0 :(得分:1)
你显然排除了平等。对于所有相同的项目不能这样安排。所以,如果某个东西等于就绪序列的当前末尾,我们就会把它扔掉。
退出输入数组的结尾a。
a:7,10,5,8,9
x:10,7?5
x:10,5,7?8
x:10,5,8,7?9
x:10,5,8,7,9
复杂性为O(n)。但你不应该忘记清理平等的物品。您可以随机选择下一个项目,同时甩掉与前一个数字相等的数字。你不需要创建一个数组。无论如何,它们都是随机的。