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++
// C++ program to reverse an array without
// using "-" sign
#include <bits/stdc++.h>
using namespace std;
// Function to reverse array
void reverseArray(int arr[], int n)
{
// Trick to assign -1 to a variable
int x = (INT_MIN / INT_MAX);
// Reverse array in simple manner
for (int i = 0; i < n / 2; i++)
// Swap ith index value with (n-i-1)th
// index value
swap(arr[i], arr[n + (x * i) + x]);
}
// Drivers code
int main()
{
int arr[] = { 5, 3, 7, 2, 1, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
reverseArray(arr, n);
// print the reversed array
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
Java
// Java program to reverse an array without
// using "-" sign
class GFG {
// Function to reverse array
static void reverseArray(int arr[], int n)
{
// Trick to assign -1 to a variable
int x = (Integer.MIN_VALUE / Integer.MAX_VALUE);
// Reverse array in simple manner
for (int i = 0; i < n / 2; i++)
// Swap ith index value with (n-i-1)th
// index value
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;
}
// Drivers code
public static void main(String[] args)
{
int arr[] = { 5, 3, 7, 2, 1, 6 };
int n = arr.length;
reverseArray(arr, n);
// print the reversed array
for (int i = 0; i < n; i++)
System.out.print(arr[i] + " ");
}
}
// This code has been contributed by 29AjayKumar
Python3
# Python program to reverse an array without
# using "-" sign
# Function to reverse array
def reverseArray(arr, n):
import sys
# Trick to assign - 1 to a variable
x = -sys.maxsize // sys.maxsize
# Reverse array in simple manner
for i in range(n//2):
# Swap ith index value with (n-i-1)th
# index value
arr[i], arr[n + (x*i) + x] = arr[n + (x*i) + x], arr[i]
# Driver code
if __name__ == "__main__":
arr = [5, 3, 7, 2, 1, 6]
n = len(arr)
reverseArray(arr, n)
# print the reversed array
for i in range(n):
print(arr[i], end=" ")
# This code is contributed by
# sanjeev2552
C#
// C# program to reverse an array without
// using "-" sign
using System;
class GFG {
// Function to reverse array
static void reverseArray(int[] arr, int n)
{
// Trick to assign -1 to a variable
int x = (int.MinValue / int.MaxValue);
// Reverse array in simple manner
for (int i = 0; i < n / 2; i++)
// Swap ith index value with (n-i-1)th
// index value
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;
}
// Drivers code
public static void Main()
{
int[] arr = { 5, 3, 7, 2, 1, 6 };
int n = arr.Length;
reverseArray(arr, n);
// print the reversed array
for (int i = 0; i < n; i++)
Console.Write(arr[i] + " ");
}
}
/* This code contributed by PrinciRaj1992 */
PHP
<?PHP
// PHP program to reverse an array without
// using "-" sign
// Function to reverse array
function reverseArray(&$arr, $n)
{
// Trick to assign -1 to a variable
$x = (PHP_INT_MIN / PHP_INT_MAX);
// Reverse array in simple manner
for ($i = 0; $i < $n / 2; $i++)
// Swap ith index value with (n-i-1)th
// index value
swap($arr, $i, $n + ($x * $i) + $x);
}
function swap(&$arr, $i, $j)
{
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
return $arr;
}
// Drivers code
$arr = array( 5, 3, 7, 2, 1, 6 );
$n = sizeof($arr);
reverseArray($arr, $n);
// print the reversed array
for ($i = 0; $i < $n; $i++)
echo($arr[$i] . " ");
// This code is contributed by Code_Mech
JavaScript
<script>
//javascript program to reverse an array without
// using "-" sign
// Function to reverse array
function reversearray(arr,n)
{
// Trick to assign -1 to a variable
let x = parseInt(-2147483648 / 2147483647, 10);
// Reverse array in simple manner
for (let i = 0; i < parseInt(n / 2, 10); i++)
{
// Swap ith index value with (n-i-1)th
// index value
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);
// print the reversed array
for (let i = 0; i < n; i++)
document.write(arr[i] +" ");
// This code is contributed by vaibhavrabadiya117.
</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++
// C++ program to reverse an array without
// using "-" sign
#include <bits/stdc++.h>
using namespace std;
// Function to reverse array
void reverseArray(int arr[], int n)
{
// Reverse array in simple manner
for (int i = 0; i < n / 2; i++)
// Swap ith index value with (n-i-1)th
// index value
// Note : A - B = A + ~B + 1
// So n - i = n + ~i + 1 then
// n - i - 1 = (n + ~i + 1) + ~1 + 1
swap(arr[i], arr[(n + ~i + 1) + ~1 + 1]);
}
// Driver code
int main()
{
int arr[] = { 5, 3, 7, 2, 1, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
reverseArray(arr, n);
// print the reversed array
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
Java
// Java program to reverse an array without
// using "-" sign
import java.util.Arrays;
class GFG {
// Function to reverse array
static void reverseArray(int arr[], int n)
{
// Reverse array in simple manner
for (int i = 0; i < n / 2; i++)
// Swap ith index value with (n-i-1)th
// index value
// Note : A - B = A + ~B + 1
// So n - i = n + ~i + 1 then
// n - i - 1 = (n + ~i + 1) + ~1 + 1
{
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;
}
// Driver code
public static void main(String args[])
{
int arr[] = { 5, 3, 7, 2, 1, 6 };
int n = arr.length;
reverseArray(arr, n);
// print the reversed array
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
}
// This code contributed by Rajput-Ji
Python3
# Python program to reverse an array without
# using "-" sign
# Function to reverse array
def reverseArray(arr, n):
# Reverse array in simple manner
for i in range(n//2):
# Swap ith index value with (n-i-1)th
# index value
# Note : A - B = A + ~B + 1
# So n - i = n + ~i + 1 then
# n - i - 1 = (n + ~i + 1) + ~1 + 1
arr[i], arr[(n + ~i + 1) + ~1 + 1] = arr[(n + ~i + 1) + ~1 + 1],arr[i]
# Driver code
arr = [ 5, 3, 7, 2, 1, 6 ]
n = len(arr)
reverseArray(arr, n)
# print the reversed array
for i in range(n):
print(arr[i],end=" ")
# This code is contributed by ankush_953
C#
// C# program to reverse an array without
// using "-" sign
using System;
class GFG {
// Function to reverse array
static void reverseArray(int[] arr, int n)
{
// Reverse array in simple manner
for (int i = 0; i < n / 2; i++)
// Swap ith index value with (n-i-1)th
// index value
// Note : A - B = A + ~B + 1
// So n - i = n + ~i + 1 then
// n - i - 1 = (n + ~i + 1) + ~1 + 1
{
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;
}
// Driver code
public static void Main(String[] args)
{
int[] arr = { 5, 3, 7, 2, 1, 6 };
int n = arr.Length;
reverseArray(arr, n);
// print the reversed array
for (int i = 0; i < n; i++) {
Console.Write(arr[i] + " ");
}
}
}
// This code has been contributed by 29AjayKumar
PHP
<?PHP
// PHP program to reverse an array without
// using "-" sign
// Function to reverse array
function reverseArray(&$arr, $n)
{
// Reverse array in simple manner
for ($i = 0; $i < $n / 2; $i++)
// Swap ith index value with (n-i-1)th
// index value
// Note : A - B = A + ~B + 1
// So n - i = n + ~i + 1 then
// n - i - 1 = (n + ~i + 1) + 1 + 1
{
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;
}
// Driver code
{
$arr = array( 5, 3, 7, 2, 1, 6 );
$n = sizeof($arr);
reverseArray($arr, $n);
// print the reversed array
for ($i = 0; $i < $n; $i++)
{
echo($arr[$i] . " ");
}
}
// This code contributed by Code_Mech
JavaScript
<script>
// Javascript program to reverse an array without using "-" sign
// Function to reverse array
function reverseArray(arr, n)
{
// Reverse array in simple manner
for (let i = 0; i < parseInt(n / 2, 10); i++)
// Swap ith index value with (n-i-1)th
// index value
// Note : A - B = A + ~B + 1
// So n - i = n + ~i + 1 then
// n - i - 1 = (n + ~i + 1) + ~1 + 1
{
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);
// print the reversed array
for (let i = 0; i < n; i++) {
document.write(arr[i] + " ");
}
// This code is contributed by mukesh07.
</script>
Time Complexity: O(n)
Auxiliary Space: O(1)
Similar Reads
Reverse an array using Stack Given an array arr[] of size n, the task is to reverse the array using Stack.Examples:Input: arr = [10, 20, 30, 40, 50] Output: 50 40 30 20 10 Explanation: Upon reversing the array becomes [50, 40, 30, 20, 10]. Therefore, the output is 50 40 30 20 10.Input: arr = [ 1 ]Output: 1Explanation: Reversing
4 min read
Rearrange an array such that arr[i] = i Given an array of elements of length n, ranging from 0 to n - 1. All elements may not be present in the array. If the element is not present then there will be -1 present in the array. Rearrange the array such that arr[i] = i and if i is not present, display -1 at that place.Examples: Input: arr[] =
13 min read
Sort the Array by reversing the numbers in it Given an array arr[] of N non-negative integers, the task is to sort these integers according to their reverse. Examples: Input: arr[] = {12, 10, 102, 31, 15} Output: 10 31 12 15 102 Reversing the numbers: 12 -> 21 10 -> 01 102 -> 201 31 -> 13 15 -> 51 Sorting the reversed numbers: 01
6 min read
Reverse an array upto a given position Given an array arr[] and a position in array, k. Write a function name reverse (a[], k) such that it reverses subarray arr[0..k-1]. Extra space used should be O(1) and time complexity should be O(k). Example: Input: arr[] = {1, 2, 3, 4, 5, 6} k = 4 Output: arr[] = {4, 3, 2, 1, 5, 6} We strongly reco
6 min read
Program to reverse an array using pointers Prerequisite : Pointers in C/C++ Given an array, write a program to reverse it using pointers . In this program we make use of * operator . The * (asterisk) operator denotes the value of variable . The * operator at the time of declaration denotes that this is a pointer, otherwise it denotes the val
4 min read