C++程序 在O(n)时间内并使用O(1)额外空间重新排列正负数
一个数组包含随机顺序的正数和负数。重新排列数组元素,以便正数和负数交替放置。正数和负数的数量不必相等。如果有更多的正数,它们出现在数组的末尾。如果有更多的负数,它们也出现在数组末尾。
例如,如果输入数组为[-1,2,-3,4,5,6,-7,8,9],则输出应为[9,-7,8,-3,5,-1,2,4,6]。
注意: 分区过程会改变元素的相对顺序。即,此方法不维护元素出现的顺序。查看此处以保持元素出现顺序的解决方案。
解决方案是首先使用QuickSort的分区过程将正数和负数分开。在分区过程中,将0视为枢轴元素的值,以便将所有负数放在正数之前。一旦分离了负数和正数,我们从第一个负数和第一个正数开始,并交替交换每个负数和下一个正数。
输出
时间复杂度: O(n),其中n是给定数组中的元素数。因为我们使用循环遍历N次,所以它将花费O(N)时间。
辅助空间: O(1),因为我们没有使用任何额外的空间。