Rearrange Array

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

Example:

Input : [1, 0]
Return : [0, 1]

Lets say N = size of the array. Then, following holds true :

  • All elements in the array are in the range [0, N-1]

  • N * N does not overflow for a signed integer

public class Solution {
    public void arrange(ArrayList<Integer> arr) {
        int n = arr.size();
        for (int i = 0; i < n; i++)
            arr.set(i, arr.get(i) + (arr.get(arr.get(i)) % n) * n);
        for (int i = 0; i < n; i++)
            arr.set(i, arr.get(i) / n);
    }
}

Last updated