给定一个数组a={1,2,3,4,5,6,7,8}
我们应该把所有的奇数位元素(1,3,5,7)和偶数位元素(2,4,6,8)放在一起,同时保持顺序。
输入:[1,2,3,4,5,6,7,8]。
输出:[1,3,5,7,2,4,6,8]。
更新:(示例2)
例2:[3,54,77,86,45,2,25100]
输出:[3,77,45,25,54,86,2,100]
限制:O(n)时间复杂度和O(1)空间复杂度。
我的方法:
一。像在中那样分区(快速排序分区)
问题:订单未保留。(1,7,3,5,4,6,2,8)-o(n)时间复合物
2.将奇数元素放置到正确位置并移动所有其他元素:
问题:每个元素的值都是o(n),移位需要另一个o(n)。因此时间复杂度变为O(n ^ 2)。
是否存在o(n)时间复形和o(1)空间复形解?

最佳答案

看看是否可以根据循环推广这些置换解,注意排序索引将是i[]={0,2,4,6,1,3,5,7},i[1]=2,i[2]=4,i[4]=1,循环结束。i[3]=6,i[6]=5,i[5]=3,循环结束。这里的问题是,如果事先不知道n,那么即使i[i]可以动态计算(i[i]=(2*i对于8个元素,它是两个周期,每个周期3个元素:

             0 1 2 3 4 5 6 7
       I[] = 0 2 4 6 1 3 5 7

   t = a[1]  2
a[1] = a[2]  1 3 3 4 5 6 7 8
a[2] = a[4]  1 3 5 4 5 6 7 8
a[4] = t     1 3 5 4 2 6 7 8
   t = a[3]  4
a[3] = a[6]  1 3 5 7 2 6 7 8
a[6] = a[5]  1 3 5 7 2 6 6 8
a[5] = t     1 3 5 7 2 4 6 8

对于12个元素,它只是10个元素的一个循环
               0  1  2  3  4  5  6  7  8  9 10 11
         I[] = 0  2  4  6  8 10  1  3  5  7  9 11

    t = a[ 1]  2
a[ 1] = a[ 2]  1  3  3  4  5  6  7  8  9 10 11 12
a[ 2] = a[ 4]  1  3  5  4  5  6  7  8  9 10 11 12
a[ 4] = a[ 8]  1  3  5  4  9  6  7  8  9 10 11 12
a[ 8] = a[ 5]  1  3  5  4  9  6  7  8  6 10 11 12
a[ 5] = a[10]  1  3  5  4  9 11  7  8  6 10 11 12
a[10] = a[ 9]  1  3  5  4  9 11  7  8  6 10 10 12
a[ 9] = a[ 7]  1  3  5  4  9 11  7  8  6  8 10 12
a[ 7] = a[ 3]  1  3  5  4  9 11  7  4  6  8 10 12
a[ 3] = a[ 6]  1  3  5  7  9 11  7  4  6  8 10 12
a[ 6] = t      1  3  5  7  9 11  2  4  6  8 10 12

对于27个元素,它是3个循环,从a[1](19个元素)、a[3](6个元素)和a[9](2个元素)开始。

10-06 13:55