arrays - 面试测试——重新排列数组

标签 arrays algorithm

<分区>

Possible Duplicate:
Reordering of array elements

在给定的元素数组中,如 [a1,a2,a3,..an,b1,b2,b3,..bn,c1,c2,c3,...cn] 编写一个程序来合并它们,如 [a1 ,b1,c1,a2,b2,c2,...an,bn,cn]。 我们必须在 O(1) 的额外空间内完成。

示例测试用例:

Input #00:

{1,2,3,4,5,6,7,8,9,10,11,12}

Output #00:

{1,5,9,2,6,10,3,7,11,4,8,12}

Explanation:

Here as you can notice, the array is of the form
{a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4} 

编辑: 我在亚马逊分类考试中得到了它。已经尝试了很长时间了。 请提供伪代码。我尝试的是为第二个元素 e(第一个已经在正确的位置)找到新位置 p,在 p 处插入 e 并对位置 p 处的旧元素重复相同的操作。但这是一个循环结束。 我尝试检测周期并将起始位置递增 1。但即使这样也不起作用。

编辑2:

#include <iostream>
using namespace std;

int pos(int i, int n) 
{
    if(i<n)  
     {
         return  3*i;

           }

       else if(i>=n && i<2*n)
       {

            return 3*(i-n) + 1;
            }
    else if(i>=2*n && i<3*n)
       {
            return 3*(i-2*n) + 2;
            }
return -1;
}
void printn(int* A, int n)
{
         for(int i=0;i<3*n;i++)  
             cout << A[i]<<";";

    cout << endl;
     }

void merge(int A[], int n)
{
 int j=1;    
 int k =-1;
 int oldAj = A[1];
 int count = 0;
 int temp;
 while(count<3*n-1){

 printn(A,n);
 k = pos(j,n);
 temp = A[k];
 A[k] = oldAj;
 oldAj = temp;
 j = k;
 count++;
 if(j==1) {j++;}
}

 }

int main()
{
    int A[21] = {1,4,7,10,13,16,19,2,5,8,11,14,17,20,3,6,9,12,15,18,21};
    merge(A,7);

    cin.get();}

最佳答案

这就是所谓的in-place in-shuffle算法,要想高效的完成是一件非常困难的事情。我只是发布这个条目,这样人们就不会发布他们所谓的“解决方案”,声称它可以扩展到 O(1) 空间,没有任何证据...

这是一个更简单的情况的论文,当列表的形式为:a1 a2 a3 ... an b1 b2 b3 .. bn:

http://arxiv.org/PS_cache/arxiv/pdf/0805/0805.1598v1.pdf

关于arrays - 面试测试——重新排列数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106376/

相关文章:

arrays - 比较取自工作表范围的 2 个数组时出现 Application.Match 错误

java - 多数组中的 nullPointerException

iphone - Cocos2D 帮助 : How to implement page flip or page curl in cocos2D?

ios - 不能快速在不同大小的类型之间使用 unsafeBitCast

c - 为什么从 inptr 读入数组的值不同于 fgetc(inptr) 给出的值?

arrays - 如何以每个元素大于/小于其邻居的方式重新排列数组

沿框架旋转点的算法(相对)

algorithm - 将 10 位值合并为一个唯一字节

algorithm - 惯用遍历二叉树(可能是任何树)

javascript - 用于压缩类 DNA 字符串的简单紧凑代码