Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Reverse an array without using subtract sign ‘-‘ anywhere in the code

  • Difficulty Level : Medium
  • Last Updated : 15 Jun, 2021

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: 
1- Store array elements into a vector in C++
2- Then reverse the vector using predefined functions. 
3- Then store reversed elements into the array back.
Method 2: 
1- Store array elements into a stack
2- 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: 
1- In this method, the idea is to use a negative sign but by storing it into a variable. 
2- By using this statement x = (INT_MIN/INT_MAX), we get -1 in a variable x. 
3- As INT_MIN and INT_MAX have same values just of opposite signs, so on dividing them it will give -1. 
4- Then ‘x’ can be used in decrementing the index from last.
 

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>

Output: 
 

6 1 2 7 3 5

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 
 

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>

Output: 
 

6 1 2 7 3 5

This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 


My Personal Notes arrow_drop_up

Start Your Coding Journey Now!