Rearrang Array

题目描述

Rearrange a given array so that Arr[i] becomes Arr[Arr[i]] with O(1) extra space.

assume:0 <= A[i] <= n

解题方法

方法1,数学方法,会overflow

for array A, for each index i

A[i] += (A[A[i]] % n) * n

然后再loop一遍,old value = A[i] % n, new value = A[i] / n

这种方法的缺点是会overflow

方法2

记录下下一个要替换的index,不断地去处理,因为可能有cycle,所以要确定遍历 所有的值,并且要记录下已经遍历过的值。

记录遍历过的值我们可以通过将其设为负数来记录,并且在一开始将所有数都 加1,因为0没有负数

Solution

Reference