【发布时间】:2012-04-23 16:06:43
【问题描述】:
Segregating an array for even and odd numbers 这是重复的,但没有可以保留元素顺序的解决方案,在 O(n) 时间和 O(1) 空间中是否有这样的解决方案。
我只能想到在给定的重复链接中提到的方法
【问题讨论】:
Segregating an array for even and odd numbers 这是重复的,但没有可以保留元素顺序的解决方案,在 O(n) 时间和 O(1) 空间中是否有这样的解决方案。
我只能想到在给定的重复链接中提到的方法
【问题讨论】:
我怀疑。
您可以使用链接文章中显示的基本两指针解决方案,但您可以将数组元素向左滑动并将奇数元素放在其位置,而不是交换奇数元素;这是 O(n^2) 时间和 O(1) 空间,与插入排序相同,因为您必须访问每个元素并可能将其滑动到数组的整个长度。
或者您可以保留 O(n) 时间,但使用 O(n) 空间,方法是两次遍历输入数组,在第一次遍历时将偶数元素复制到输出数组,在第二次遍历时将奇数元素复制到输出数组。
但我看不到同时保留 O(n) 时间和 O(1) 空间的方法。
如果您希望所有元素在其偶数和奇数分区中排序,您可以使用标准系统排序和一个比较函数,仅当较低索引元素 a 为偶数且索引较高的元素 b 为奇数,或者如果两个元素具有相同的奇偶性且 ab;在 C 中是(a%2==0 && b%2==1) || (a%2==b%2 && a<b)。这是排序中堆栈的 O(n log n) 时间和 O(log n) 空间,因此它不会保留原始的时间或空间界限,也不能解决请求的问题。
【讨论】: