给定一个数组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 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个元素)开始。