Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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.

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>


Output

6 1 2 7 3 5 

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>


Output

6 1 2 7 3 5 

Time Complexity: O(n) 
Auxiliary Space: O(1)

 



Last Updated : 14 Sep, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads