I really don't like the array approach. Indices into the array are effectively just references that are hidden from the compiler. They have all the same lifetime issues as real references, but the compiler can't do anything to help you avoid them. Plus now you have the hassle of dealing with the array itself.
If you really want to opt out of the borrow checker, it's better to use raw pointers and unsafe
blocks. That gets you out of managing the array, and it makes the fundamental unsafety of the solution much more obvious to other people reading the code.