Reverse Array Order
Solution 1
If it's an Object array, then Collections.reverse(Arrays.asList(array))
will do the job with constant memory and linear time -- no temporary array required.
Solution 2
Use a single temp element.
int array[SIZE];
int temp;
for (int i = 0; i < SIZE/2; i++)
{
temp = array[i];
array[i] = array[SIZE-1 - i];
array[SIZE-1 - i] = temp;
}
Solution 3
You don't need to use a temporary array; just step through the array from the beginning to half-way through, swapping the element at i
for the element at array.length-i-1
. Be sure the handle the middle element correctly (not hard to do, but do make sure.)
Solution 4
you can do it without needing a temp array
- loop from the beginning (or end doesn't matter) to the middle of the array
- swap element with element at (last element - index) (so 0 and
size - 1
, 1 andsize - 2
etc) - you'll do something like this to swap:
temp = a[i]; a[i] = a[end-i]; a[end-i] = temp;
- repeat
marcwho
Updated on October 13, 2020Comments
-
marcwho over 3 years
I am trying to reverse the order of an Array in java.
What is the most efficient way to do so in O(n) with the least amount of memory used.
No need to answer with code, pseudo code will be fine.
Here is my thought process:create a new temp array //I think this is a waste of memory, //but I am not sure if there's a better way grab elements from the end of the original array -decrement this variable insert element in beginning of temp array -increment this variable then make the original array point to the temp array? //I am not sure //if I can do this in java; so let's say the //original array is Object[] arr; and the temp array is //Object[] temp. Can I do temp = arr; ?
Is there a better more efficient way to do this perhaps without using a temp array? and Lastly, assume that there are no nulls in the array, so everything can work. Thank you
Edit: no this is not homework.
-
Ernest Friedman-Hill about 12 years+1 Indeed, since the OP now says this is not homework, this is a great answer.
-
eddyparkinson over 11 yearsLove the solution. Just confirmed that no temporary array is required see: ideone.com/api/embed.js/link/xLLTpl ... click "Clone" and then "Run"
-
ceving over 10 yearsThis does not look like Java.
-
Jean-Yves over 9 yearsDoes not work, at least with Java 1.6: System.out.println( X[ 0 ] + " to " + X[ X.length - 1 ] ); Collections.reverse( Arrays.asList( X ) ); System.out.println( X[ 0 ] + " to " + X[ X.length - 1 ] ); prints: 2272.6270739116 to 186.704625250768 2272.6270739116 to 186.704625250768
-
Louis Wasserman over 9 years@Jean-Yves: What is the type of
X
? I strongly suspect it's not an object array, which I specified in my answer was necessary. -
Nathan Tuggy almost 7 yearsUses same methods as accepted answer, just less elegantly and with less of an explanation.
-
Darshan almost 7 yearsthere are no need of explanation bro it's little two step nd i'm not explainer.
-
Nathan Tuggy almost 7 yearsGood answers on Stack Overflow explain things. The accepted answer does. If there's already a good answer that says the same thing you would, or if there's no way to write a good answer at all, there's no real point in adding an answer to the question: that just adds noise.