**Another Approach:**

- Navigate through the array.
- Check if a[i] = -1, if yes then ignore it.
- If a[i] != -1, Check if element a[i] is at its
**correct position (i=A[i])**. If yes then ignore it. - If a[i] != -1 and element a[i] is not at its correct
**position (i!=A[i])**then place it to its correct position, but there are two conditions:

- Either
**A[i] is vacate**, means**A[i] = -1**, then just put**A[i] = i**. - OR
**A[i] is not vacate**, means**A[i] = x**, then**int y=x**put**A[i] = i**. Now, we need to place**y**to its correct place, so repeat from step 3.

Below is the implementation for the above approach:

- JAVA

`// Java program for rearrange an`

`// array such that arr[i] = i.`

`import`

`java.util.*;`

`import`

`java.lang.*;`

`public`

`class`

`GfG {`

` `

`// Function to rearrange an array`

` `

`// such that arr[i] = i.`

` `

`public`

`static`

`int`

`[] fix(`

`int`

`[] A)`

` `

`{`

` `

`for`

`(`

`int`

`i = `

`0`

`; i < A.length; i++)`

` `

`{`

` `

`if`

`(A[i] != -`

`1`

`&& A[i] != i)`

` `

`{`

` `

`int`

`x = A[i];`

` `

`// check if desired place`

` `

`// is not vacate`

` `

`while`

`(A[x] != -`

`1`

`&& A[x] != x)`

` `

`{`

` `

`// store the value from`

` `

`// desired place`

` `

`int`

`y = A[x];`

` `

`// place the x to its correct`

` `

`// position`

` `

`A[x] = x;`

` `

`// now y will become x, now`

` `

`// search the place for x`

` `

`x = y;`

` `

`}`

` `

`// place the x to its correct`

` `

`// position`

` `

`A[x] = x;`

` `

`// check if while loop hasn't`

` `

`// set the correct value at A[i]`

` `

`if`

`(A[i] != i)`

` `

`{`

` `

`// if not then put -1 at`

` `

`// the vacated place`

` `

`A[i] = -`

`1`

`;`

` `

`}`

` `

`}`

` `

`}`

` `

`return`

`A;`

` `

`}`

` `

`// Driver code`

` `

`public`

`static`

`void`

`main(String[] args)`

` `

`{`

` `

`int`

`A[] = { -`

`1`

`, -`

`1`

`, `

`6`

`, `

`1`

`, `

`9`

`, `

`3`

`, `

`2`

`, -`

`1`

`, `

`4`

`, -`

`1`

`};`

` `

`System.out.println(Arrays.toString(fix(A)));`

` `

`}`

`}`

**Output**

-1 1 2 3 4 -1 6 -1 -1 9