Segregating an array for even and odd numbers这是重复的,但没有解可以保持元素的顺序,在O(n)时间和O(1)空间中是否存在这样的解。
我只想一想在给出的重复链接中提到的方法。
发布于 2012-04-23 13:19:40
我怀疑。
您可以使用链接文章中显示的基本双指针解决方案,但不需要交换奇数元素,而是可以将数组元素向左滑动,并将奇数元素放在它的位置上;这与插入排序一样是O(n^2)时间和O(1)空间,因为您必须访问每个元素,并可能将数组的整个长度滑动。
或者,您可以保留O(n)时间,但使用O(n)空间,方法是通过输入数组进行两次传递,在第一次传递时将偶数元素复制到输出数组,在第二次传递时将奇数元素复制到输出数组。
但我没有办法同时保留O(n)时间和O(1)空间。
如果您想让所有元素在偶数和奇数分区中排序,您可以使用标准的系统排序和比较函数,这比低索引元素a是偶数,而高索引元素b是奇数,或者如果这两个元素具有相同的奇偶性和a(a%2==0 && b%2==1) || (a%2==b%2 && a<b)。这是排序中堆栈的O(n log )时间和O(log n)空间,因此它既不保留原始堆栈的时间或空间界限,也不解决所请求的问题。
https://stackoverflow.com/questions/10284123
复制