BFE.devAI解答 - JavaScript 代码题
25. 更新数组的顺序
可以使用循环交换的方式在不使用额外空间的情况下完成该题目。具体步骤如下:
-
从数组第一个元素开始遍历,假设当前遍历到的是第i个元素。
-
如果i与B[i]相等,说明该元素已经在正确的位置,跳过该元素。
-
如果i与B[i]不相等,则将A[i]和A[B[i]]交换位置,并将B[i]的值赋给i。这时候A[i]的新位置就是B[i]。
-
继续对i进行操作,直到i遍历到了整个数组,排序完成。
实现代码如下:
function updateArrayOrder(A, B) { for (let i = 0; i < A.length; i++) { while (i !== B[i]) { // 当前位置不对,进行交换 const j = B[i]; // j 是 A[i] 的新位置 // 交换 A[i] 和 A[j] const temp = A[i]; A[i] = A[j]; A[j] = temp; // 修改 B 数组 const tempB = B[i]; B[i] = B[j]; B[j] = tempB; } }}const A = ['A', 'B', 'C', 'D', 'E', 'F'];const B = [1, 5, 4, 3, 2, 0];updateArrayOrder(A, B);console.log(A); // ['F', 'A', 'E', 'D', 'C', 'B']