将数组值更改为数组索引

时间:2018-03-08 07:17:30

标签: arrays compare-and-swap

我有阵列 i / p:a1 [] = {3,2,0,1};
我希望输出为: o / p:a1 [] = {2,3,1,0}

即索引变为值,值变为索引。 (条件:使用SAME ARRAY a1,没有EXTRA阵列)

1 个答案:

答案 0 :(得分:1)

在没有临时值的情况下通过数组进行自我修改然后可能需要一些递归。 但考虑到堆栈上更多的内存占用以及介于两者之间的所有变量以及通常更多的CPU指令,它可以在一个简单的带有临时数组的for循环上花费大量时间:

var a1 = [3,2,0,1]; // desire: [2,3,1,0]
// desire becomes surrender , surrender becomes power
r(a1);
function r(arr, index = 0) {
  if( index < arr.length )
	arr[arr[index]] = r(arr,index+1);
	// the index become value, and the value become index
	// hunter become hunted
	return index-1;
}
console.log(a1);