arrays - 面试题 : Replacing two arrays's place in memory

标签 arrays

给定两个连续的数组,AB .他们看起来像

int AandB[] = {a1,a2,...,am,b1,b2,...,bn};

您需要编写一个程序来切换数组的顺序 AB在内存中,这样B会出现在 A 之前.在我们的示例中,AandB应该成为
int AandB[] = {b1,b2,...,bn,a1,...,am};

最有效的方法是什么?

最佳答案

三个数组反转:

(a1 a2 a3 a4 a5 b1 b2 b3)
 b3 b2 b1 a5 a4 a3 a2 a1
(b3 b2 b1)a5 a4 a3 a2 a1
 b1 b2 b3 a5 a4 a3 a2 a1
 b1 b2 b3(a5 a4 a3 a2 a1)
 b1 b2 b3 a1 a2 a3 a4 a5

使用带有开始和结束的“rev”函数表示:
rev(AandB, 0, n+m)
rev(AandB, 0, m)
rev(AandB, m, n)

对于 rev(为了清楚起见,省略类型等):
rev(x, i, j) {
    j--; // j points to one after the subarray we're reversing
    while (i < j) {
        tmp = x[i];
        x[i] = x[j];
        x[j] = tmp;
        i++;
        j--;
    }
}

关于arrays - 面试题 : Replacing two arrays's place in memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736112/

相关文章:

python - 将元素添加到数组并将其分配给同一个对象

c - 8x8 block 上的 L1xL2 阵列

c - 乱码输出

Javascript 不必要的紧凑数组操作

python - ASCII 字符串作为 Python 3 中 numpy 字符串数组的 dtype

c++ - 一旦一个 T 数组衰减为一个指向 T 的指针,它还能再变成一个 T 数组吗?

java - 对角线上的矩阵元素

c++ - 从巨大的 txt 中读取二维矩阵

arrays - 在 Fortran 中选择给定逻辑向量的数组的子集

python - 在 Python 中附加两个 3d numpy 数组