约束:
> O(1)空间
> O(n)时间
这不是一个功课问题,只是我遇到的一个有趣的问题.
这里有一些我可以想到的解决方案,但没有什么可以在给定的约束.
方法1
*带O(n)内存*
>递归地将数组分成两部分. (保持分割直到每个子问题的大小为< = 2)
>首先排列每个子问题的数组,最后编号.
>合并子问题数组
方法2
在O(n log n)时间
>排序数组的Lexicographical order它变成1234abcd
>反转阵列4321dcba的两半
>反转整个字符串abcd1234
方法3
如果定义了数字范围
另外如果是数字在一个特定的范围,那么我可以初始化一个int说track = 0;
当我在数组中遇到一个数字时,设置适当的位
例如(1 将字母交换到阵列的前半部分
2.标记轨道变量中的数字
稍后用轨道填写下半部分阵列.
方法4
如果要删除整数范围的约束,我们可以使用方法3与HashMap,但是它将需要更多的内存.
不能想到在O(1)时间和O(n)空间中解决通用问题的更好的方法.
一般问题在这里是指:
给定序列x1y1x2y2x3y3 …. xnyn
其中x1,x2是字母x1 < x2 < XN
y1y2 … yn是整数. y1 < y2 <... yn>
将输出排列为x1x2 … xny1y2 … yn
有什么建议么 ?