数组拼图:分隔偶数和奇数

时间:2012-04-23 16:06:44

标签: arrays data-structures

Segregating an array for even and odd numbers 这是重复但没有解决方案可以保留元素的顺序,在O(n)时间和O(1)空间中是否存在这样的解决方案。

我可以想到给出aove的重复链接中提到的方法

1 个答案:

答案 0 :(得分:0)

我对此表示怀疑。

您可以使用链接文章中显示的基本双指针解决方案,但不是交换奇数元素,您可以将数组元素向左滑动并将奇数元素放在其位置;这是O(n ^ 2)时间和O(1)空间的方式与插入排序相同,因为您必须访问每个元素并可能在数组的整个长度上滑动它。

或者你可以保留O(n)时间但是通过在输入数组中进行两次传递来使用O(n)空间,在第一次传递时将偶数元素复制到输出数组,在第二次传递时复制奇数元素。

但我没有办法保留O(n)时间和O(1)空间。

如果您希望所有元素在偶数和奇数分区中排序,您可以使用标准系统排序和比较函数,该函数小于仅在较低索引元素 a 时even和高索引元素 b 是奇数,或者两个元素具有相同的奇偶校验, a &lt; b ;在C (a%2==0 && b%2==1) || (a%2==b%2 && a<b)。这是排序中堆栈的O(n log n)时间和O(log n)空间,因此它不保留原始的时间或空间范围,也不能解决所请求的问题。