Reverse an array without using subtract sign ‘-‘ anywhere in the code
Last Updated :
14 Sep, 2023
Given an array, the task is to reverse the array without using subtract sign ‘-‘ anywhere in your code. It is not tough to reverse an array but the main thing is to not use ‘-‘ operator.
Asked in: Moonfrog Interview
Below are different approaches:
Method 1:
- Store array elements into a vector in C++.
- Then reverse the vector using predefined functions.
- Then store reversed elements into the array back.
Method 2:
- Store array elements into a stack.
- As the stack follows Last In First Out, so we can store elements from top of the stack into the array which will be itself in a reverse manner.
Method 3:
- In this method, the idea is to use a negative sign but by storing it into a variable.
- By using this statement x = (INT_MIN/INT_MAX), we get -1 in a variable x.
- As INT_MIN and INT_MAX have same values just of opposite signs, so on dividing them it will give -1.
- Then ‘x’ can be used in decrementing the index from last.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
void reverseArray( int arr[], int n)
{
int x = (INT_MIN / INT_MAX);
for ( int i = 0; i < n / 2; i++)
swap(arr[i], arr[n + (x * i) + x]);
}
int main()
{
int arr[] = { 5, 3, 7, 2, 1, 6 };
int n = sizeof (arr) / sizeof (arr[0]);
reverseArray(arr, n);
for ( int i = 0; i < n; i++)
cout << arr[i] << " " ;
return 0;
}
|
Java
class GFG {
static void reverseArray( int arr[], int n)
{
int x = (Integer.MIN_VALUE / Integer.MAX_VALUE);
for ( int i = 0 ; i < n / 2 ; i++)
swap(arr, i, n + (x * i) + x);
}
static int [] swap( int [] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
return arr;
}
public static void main(String[] args)
{
int arr[] = { 5 , 3 , 7 , 2 , 1 , 6 };
int n = arr.length;
reverseArray(arr, n);
for ( int i = 0 ; i < n; i++)
System.out.print(arr[i] + " " );
}
}
|
Python3
def reverseArray(arr, n):
import sys
x = - sys.maxsize / / sys.maxsize
for i in range (n / / 2 ):
arr[i], arr[n + (x * i) + x] = arr[n + (x * i) + x], arr[i]
if __name__ = = "__main__" :
arr = [ 5 , 3 , 7 , 2 , 1 , 6 ]
n = len (arr)
reverseArray(arr, n)
for i in range (n):
print (arr[i], end = " " )
|
C#
using System;
class GFG {
static void reverseArray( int [] arr, int n)
{
int x = ( int .MinValue / int .MaxValue);
for ( int i = 0; i < n / 2; i++)
swap(arr, i, n + (x * i) + x);
}
static int [] swap( int [] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
return arr;
}
public static void Main()
{
int [] arr = { 5, 3, 7, 2, 1, 6 };
int n = arr.Length;
reverseArray(arr, n);
for ( int i = 0; i < n; i++)
Console.Write(arr[i] + " " );
}
}
|
PHP
<?PHP
function reverseArray(& $arr , $n )
{
$x = (PHP_INT_MIN / PHP_INT_MAX);
for ( $i = 0; $i < $n / 2; $i ++)
swap( $arr , $i , $n + ( $x * $i ) + $x );
}
function swap(& $arr , $i , $j )
{
$temp = $arr [ $i ];
$arr [ $i ] = $arr [ $j ];
$arr [ $j ] = $temp ;
return $arr ;
}
$arr = array ( 5, 3, 7, 2, 1, 6 );
$n = sizeof( $arr );
reverseArray( $arr , $n );
for ( $i = 0; $i < $n ; $i ++)
echo ( $arr [ $i ] . " " );
|
Javascript
<script>
function reversearray(arr,n)
{
let x = parseInt(-2147483648 / 2147483647, 10);
for (let i = 0; i < parseInt(n / 2, 10); i++)
{
let temp = arr[i];
arr[i] = arr[n + (x * i) + x];
arr[n + (x * i) + x] = temp;
}
}
let arr = [ 5, 3, 7, 2, 1, 6 ];
let n = arr.length;
reversearray(arr, n);
for (let i = 0; i < n; i++)
document.write(arr[i] + " " );
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1)
Method 4:
In this method 4, the idea is to use bitwise operator to implement subtraction i.e.
A - B = A + ~B + 1
so, i-- can be written as i = i +~1 +1
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
void reverseArray( int arr[], int n)
{
for ( int i = 0; i < n / 2; i++)
swap(arr[i], arr[(n + ~i + 1) + ~1 + 1]);
}
int main()
{
int arr[] = { 5, 3, 7, 2, 1, 6 };
int n = sizeof (arr) / sizeof (arr[0]);
reverseArray(arr, n);
for ( int i = 0; i < n; i++)
cout << arr[i] << " " ;
return 0;
}
|
Java
import java.util.Arrays;
class GFG {
static void reverseArray( int arr[], int n)
{
for ( int i = 0 ; i < n / 2 ; i++)
{
swap(arr, i, (n + ~i + 1 ) + ~ 1 + 1 );
}
}
static int [] swap( int [] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
return arr;
}
public static void main(String args[])
{
int arr[] = { 5 , 3 , 7 , 2 , 1 , 6 };
int n = arr.length;
reverseArray(arr, n);
for ( int i = 0 ; i < n; i++) {
System.out.print(arr[i] + " " );
}
}
}
|
Python3
def reverseArray(arr, n):
for i in range (n / / 2 ):
arr[i], arr[(n + ~i + 1 ) + ~ 1 + 1 ] = arr[(n + ~i + 1 ) + ~ 1 + 1 ],arr[i]
arr = [ 5 , 3 , 7 , 2 , 1 , 6 ]
n = len (arr)
reverseArray(arr, n)
for i in range (n):
print (arr[i],end = " " )
|
C#
using System;
class GFG {
static void reverseArray( int [] arr, int n)
{
for ( int i = 0; i < n / 2; i++)
{
swap(arr, i, (n + ~i + 1) + ~1 + 1);
}
}
static int [] swap( int [] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
return arr;
}
public static void Main(String[] args)
{
int [] arr = { 5, 3, 7, 2, 1, 6 };
int n = arr.Length;
reverseArray(arr, n);
for ( int i = 0; i < n; i++) {
Console.Write(arr[i] + " " );
}
}
}
|
PHP
<?PHP
function reverseArray(& $arr , $n )
{
for ( $i = 0; $i < $n / 2; $i ++)
{
swap( $arr , $i , ( $n + ~ $i + 1) + ~1 + 1);
}
}
function swap(& $arr , $i , $j )
{
$temp = $arr [ $i ];
$arr [ $i ] = $arr [ $j ];
$arr [ $j ] = $temp ;
return $arr ;
}
{
$arr = array ( 5, 3, 7, 2, 1, 6 );
$n = sizeof( $arr );
reverseArray( $arr , $n );
for ( $i = 0; $i < $n ; $i ++)
{
echo ( $arr [ $i ] . " " );
}
}
|
Javascript
<script>
function reverseArray(arr, n)
{
for (let i = 0; i < parseInt(n / 2, 10); i++)
{
swap(arr, i, (n + ~i + 1) + ~1 + 1);
}
}
function swap(arr, i, j)
{
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
return arr;
}
let arr = [ 5, 3, 7, 2, 1, 6 ];
let n = arr.length;
reverseArray(arr, n);
for (let i = 0; i < n; i++) {
document.write(arr[i] + " " );
}
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...