logo

Matriu inversa en C/C++/Java/Python/JavaScript

Array invers o invertir una matriu significa canviar la posició de cada número de la matriu donada a la seva posició oposada a l'extrem, és a dir, si un nombre està a la posició 1, la seva nova posició serà Array.length, de la mateixa manera si un nombre està a la posició 2, la seva nova posició serà Array.length - 1, i així successivament.

Matriu inversa en C/C++/Java/Python/JavaScript



Donada una matriu (o cadena), la tasca és invertir la matriu/cadena.

Exemples:

Entrada: matriu_original[] = {1, 2, 3} Sortida: matriu_invertida[] = {3, 2, 1}



Entrada: matriu_original[] = {4, 5, 1, 2}
Sortida: matriu_invertida[] = {2, 1, 5, 4}

Taula de contingut

1. Array Reverse Ús d'una matriu addicional (no al lloc):

  • Creeu una matriu nova de la mateixa mida que la matriu original.
  • Copieu els elements de la matriu original a la nova matriu en ordre invers.

A continuació es mostra la implementació de l'enfocament anterior:



C++
#include ; using namespace std; void reverseArrayExtraArray(int arr[], int size) {  int reversedArr[size];  for (int i = 0; i < size; i++) {  reversedArr[i] = arr[size - i - 1];  }  // Print reversed array  cout << 'Reversed Array: ';  for (int i = 0; i < size; i++) {  std::cout << reversedArr[i] << ' ';  } } int main() {  int originalArr[] = { 1, 2, 3, 4, 5 };  int size = sizeof(originalArr) / sizeof(originalArr[0]);  reverseArrayExtraArray(originalArr, size); }>
C
#include  void reverseArrayExtraArray(int arr[], int size) {  int reversedArr[size];  for (int i = 0; i < size; i++) {  reversedArr[i] = arr[size - i - 1];  }  // Print reversed array  printf('Reversed Array: ');  for (int i = 0; i < size; i++) {  printf('%d ', reversedArr[i]);  } } int main() {  int originalArr[] = { 1, 2, 3, 4, 5 };  int size = sizeof(originalArr) / sizeof(originalArr[0]);  reverseArrayExtraArray(originalArr, size);  return 0; }>
Java
/*package whatever //do not write package name here */ import java.io.*; public class ReverseArrayExtraArray {  public static void reverseArrayExtraArray(int[] arr)  {  int[] reversedArr = new int[arr.length];  for (int i = 0; i < arr.length; i++) {  reversedArr[i] = arr[arr.length - i - 1];  }  // Print reversed array  System.out.print('Reversed Array: ');  for (int i : reversedArr) {  System.out.print(i + ' ');  }  }  public static void main(String[] args)  {  int[] originalArr = { 1, 2, 3, 4, 5 };  reverseArrayExtraArray(originalArr);  } }>
Python
def reverse_array_extra_array(arr): reversed_arr = arr[::-1] # Print reversed array print('Reversed Array:', end=' ') for i in reversed_arr: print(i, end=' ') # Example usage: original_arr = [1, 2, 3, 4, 5] reverse_array_extra_array(original_arr)>
C#
using System; class Program {  static void ReverseArrayExtraArray(int[] arr) {  int[] reversedArr = new int[arr.Length];  for (int i = 0; i < arr.Length; i++) {  reversedArr[i] = arr[arr.Length - i - 1];  }  // Print reversed array  Console.Write('Reversed Array: ');  foreach (int num in reversedArr) {  Console.Write(num + ' ');  }  }  static void Main() {  int[] originalArr = {1, 2, 3, 4, 5};  ReverseArrayExtraArray(originalArr);  } }>
JavaScript
function reverseArrayExtraArray(arr) {  const reversedArr = arr.slice().reverse();  // Print reversed array  process.stdout.write('Reversed Array: ');  reversedArr.forEach(element =>process.stdout.write(element + ' ')); } // Exemple d'ús: const originalArr = [1, 2, 3, 4, 5]; reverseArrayExtraArray(originalArr);>>>  
Sortida
Reversed Array: 5 4 3 2 1>
  • Complexitat temporal: O(n)
    • Copiar elements a una matriu nova és una operació lineal.
  • Complexitat de l'espai auxiliar: O(n)
    • S'utilitza espai addicional per emmagatzemar la nova matriu.

2. Array Reverse Ús d'un bucle (al lloc):

  • Itera per la matriu utilitzant dos punters (inici i final).
  • Canvia elements als punters inicial i final.
  • Mou el punter inicial cap al final i el punter final cap a l'inici fins que es troben o es creuen.

inversa-un-número

A continuació es mostra la implementació de l'enfocament anterior:

C++
// Iterative C++ program to reverse an array #include ; using namespace std; /* Function to reverse arr[] from start to end*/ void reverseArray(int arr[], int start, int end) {  while (start < end) {  int temp = arr[start];  arr[start] = arr[end];  arr[end] = temp;  start++;  end--;  } } /* Utility function to print an array */ void printArray(int arr[], int size) {  for (int i = 0; i < size; i++)  cout << arr[i] << ' ';  cout << endl; } /* Driver function to test above functions */ int main() {  int arr[] = { 1, 2, 3, 4, 5, 6 };  int n = sizeof(arr) / sizeof(arr[0]);  // To print original array  printArray(arr, n);  // Function calling  reverseArray(arr, 0, n - 1);  cout << 'Reversed array is' << endl;  // To print the Reversed array  printArray(arr, n);  return 0; }>
C
// Iterative C program to reverse an array #include  /* Function to reverse arr[] from start to end*/ void reverseArray(int arr[], int start, int end) {  int temp;  while (start < end) {  temp = arr[start];  arr[start] = arr[end];  arr[end] = temp;  start++;  end--;  } } /* Utility that prints out an array on a line */ void printArray(int arr[], int size) {  int i;  for (i = 0; i < size; i++)  printf('%d ', arr[i]);  printf('
'); } /* Driver function to test above functions */ int main() {  int arr[] = { 1, 2, 3, 4, 5, 6 };  int n = sizeof(arr) / sizeof(arr[0]);  printArray(arr, n);  reverseArray(arr, 0, n - 1);  printf('Reversed array is 
');  printArray(arr, n);  return 0; }>
Java
public class GFG {   /* Function to reverse arr[] from start to end*/  static void reverseArray(int arr[], int start, int end) {   int temp;   while (start < end) {   temp = arr[start];   arr[start] = arr[end];   arr[end] = temp;   start++;   end--;   }   }   /* Utility that prints out an array on a line */  static void printArray(int arr[], int size) {   for (int i = 0; i < size; i++)   System.out.print(arr[i] + ' ');   System.out.println();   }   // Driver code   public static void main(String args[]) {   int arr[] = {1, 2, 3, 4, 5, 6};   printArray(arr, 6);   reverseArray(arr, 0, 5);   System.out.print('Reversed array is 
');   printArray(arr, 6);   }  }>
Python
# Iterative python program to reverse an array # Function to reverse A[] from start to end def reverseList(A, start, end): while start < end: A[start], A[end] = A[end], A[start] start += 1 end -= 1 # Driver function to test above function A = [1, 2, 3, 4, 5, 6] print(A) reverseList(A, 0, 5) print('Reversed list is') print(A) # This program is contributed by Pratik Chhajer>
C#
// Iterative C# program to reverse an // array using System; class GFG {  /* Function to reverse arr[] from  start to end*/  static void reverseArray(int[] arr, int start, int end)  {  int temp;  while (start < end) {  temp = arr[start];  arr[start] = arr[end];  arr[end] = temp;  start++;  end--;  }  }  /* Utility that prints out an  array on a line */  static void printArray(int[] arr, int size)  {  for (int i = 0; i < size; i++)  Console.Write(arr[i] + ' ');  Console.WriteLine();  }  // Driver function  public static void Main()  {  int[] arr = { 1, 2, 3, 4, 5, 6 };  printArray(arr, 6);  reverseArray(arr, 0, 5);  Console.Write('Reversed array is 
');  printArray(arr, 6);  } } // This code is contributed by Sam007>
JavaScript
// Iterative Javascript program to reverse an array  /* Function to reverse arr[] from start to end*/ function reverseArray(arr,start,end)  {   while (start < end)   {   var temp = arr[start];   arr[start] = arr[end];   arr[end] = temp;   start++;   end--;   }  }  /* Utility function to print an array */ function printArray(arr,size)  {  for (var i = 0; i < size; i++){  console.log(arr[i]);  }  }  /* Driver function to test above functions */  var arr= [1, 2, 3, 4, 5, 6];   var n = 6;   // To print original array   printArray(arr, n);     // Function calling   reverseArray(arr, 0, n-1);     console.log('Reversed array is');   printArray(arr, n);>
PHP
 // Iterative PHP program  // to reverse an array  /* Function to reverse  $arr from start to end*/ function reverseArray(&$arr, $start, $end) { while ($start < $end) { $temp = $arr[$start]; $arr[$start] = $arr[$end]; $arr[$end] = $temp; $start++; $end--; } } /* Utility function to  print an array */ function printArray(&$arr, $size) { for ($i = 0; $i < $size; $i++) echo $arr[$i] . ' '; echo '
'; } // Driver code  $arr = array(1, 2, 3, 4, 5, 6); // To print original array  printArray($arr, 6); // Function calling  reverseArray($arr, 0, 5); echo 'Reversed array is' .'
'; // To print the Reversed array  printArray($arr, 6); // This code is contributed  // by ChitraNayal  ?>>

Sortida Complexitat temporal: O(n)
  • El bucle recorre la meitat de la matriu, de manera que és lineal respecte a la mida de la matriu.
  • Complexitat de l'espai auxiliar: O(1)
    • Inversió al lloc, és a dir, no utilitza espai addicional.
  • 3. Mètodes incorporats inversos de matriu (no in situ):

    • Utilitzeu mètodes integrats comreverse>en Python oArray.Reverse>en C#.

    A continuació es mostra la implementació de l'enfocament anterior:

    C++
    #include  // for std::reverse #include  int main() {  int originalArray[] = { 1, 2, 3, 4, 5 };  int length  = sizeof(originalArray) / sizeof(originalArray[0]);  // Using inbuilt method in C++  std::reverse(originalArray, originalArray + length);  // Print the reversed array  for (int i = 0; i < length; i++) {  std::cout << originalArray[i] << ' ';  }  return 0; }>
    Java
    /*package whatever //do not write package name here */ import java.util.Arrays; public class ArrayReverse {  public static void main(String[] args)  {  int[] originalArray = { 1, 2, 3, 4, 5 };  // Using inbuilt method in Java  int[] reversedArray = new int[originalArray.length];  for (int i = 0; i < originalArray.length; i++) {  reversedArray[i]  = originalArray[originalArray.length - 1  - i];  }  // Print the reversed array  System.out.println(Arrays.toString(reversedArray));  } }>
    Python
    original_array = [1, 2, 3, 4, 5] # Using inbuilt method in Python reversed_array = list(reversed(original_array)) # Print the reversed array print(reversed_array)>
    C#
    using System; class Program {  static void Main()  {  int[] originalArray = { 1, 2, 3, 4, 5 };  // Using inbuilt method in C#  Array.Reverse(originalArray);  // Print the reversed array  foreach(int num in originalArray)  {  Console.Write(num + ' ');  }  } }>
    JavaScript
    let originalArray = [1, 2, 3, 4, 5]; // Using inbuilt method in JavaScript let reversedArray = originalArray.slice().reverse(); // Print the reversed array console.log(reversedArray);>

    Sortida
    5 4 3 2 1>
    • Complexitat temporal: O (n) Elreverse>El mètode normalment té una complexitat temporal lineal.
    • Complexitat de l'espai auxiliar: O(n)
      • S'utilitza espai addicional per emmagatzemar la matriu invertida.

    4. Recurs inversa de matriu (in situ o no local):

    • Definiu una funció recursiva que prengui una matriu com a entrada.
    • Canvia el primer i l'últim element.
    • Crida recursivament la funció amb el subbarray restant.

    A continuació es mostra la implementació de l'enfocament anterior:

    funció de crida javascript des d'html
    C++
    // Recursive C++ program to reverse an array #include ; using namespace std; /* Function to reverse arr[] from start to end*/ void reverseArray(int arr[], int start, int end) {  if (start>= final) tornar;  int temp = arr[inici];  arr[inici] = arr[final];  arr[final] = temp;  // Funció recursiva que crida reverseArray(arr, start + 1, end - 1); } /* Funció d'utilitat per imprimir una matriu */ void printArray(int arr[], int size) { for (int i = 0; i< size; i++)  cout << arr[i] << ' ';  cout << endl; } /* Driver function to test above functions */ int main() {  int arr[] = { 1, 2, 3, 4, 5, 6 };  // To print original array  printArray(arr, 6);  // Function calling  reverseArray(arr, 0, 5);  cout << 'Reversed array is' << endl;  // To print the Reversed array  printArray(arr, 6);  return 0; }>
    C
    // Recursive C program to reverse an array #include ; /* Function to reverse arr[] from start to end*/ void reverseArray(int arr[], int start, int end) {  int temp;  if (start>= final) tornar;  temp = arr[inici];  arr[inici] = arr[final];  arr[final] = temp;  reverseArray (arr, inici + 1, final - 1); } /* Utilitat que imprimeix una matriu en una línia */ void printArray(int arr[], int size) { int i;  per (i = 0; i< size; i++)  printf('%d ', arr[i]);  printf('
    '); } /* Driver function to test above functions */ int main() {  int arr[] = { 1, 2, 3, 4, 5, 6 };  printArray(arr, 6);  reverseArray(arr, 0, 5);  printf('Reversed array is 
    ');  printArray(arr, 6);  return 0; }>
    Java
    /*package whatever //do not write package name here */ import java.io.*; class ReverseArray {  /* Function to reverse arr[] from start to end*/  static void reverseArray(int arr[], int start, int end)  {  int temp;  if (start>= final) tornar;  temp = arr[inici];  arr[inici] = arr[final];  arr[final] = temp;  reverseArray (arr, inici + 1, final - 1);  } /* Utilitat que imprimeix una matriu en una línia */ static void printArray(int arr[], int size) { for (int i = 0; i< size; i++)  System.out.print(arr[i] + ' ');  System.out.println('');  }  /*Driver function to check for above functions*/  public static void main(String[] args)  {  int arr[] = { 1, 2, 3, 4, 5, 6 };  printArray(arr, 6);  reverseArray(arr, 0, 5);  System.out.println('Reversed array is ');  printArray(arr, 6);  } } /*This article is contributed by Devesh Agrawal*/>
    Python
    # Recursive python program to reverse an array # Function to reverse A[] from start to end def reverseList(A, start, end): if start>= final: retorn A[inici], A[final] = A[final], A[inici] reverseList(A, inici+1, final-1) # Funció del controlador per provar a sobre de la funció A = [1, 2, 3 , 4, 5, 6] print(A) reverseList(A, 0, 5) print('La llista invertida és') print(A) # Aquest programa és aportat per Pratik Chhajer>>>C#
    JavaScript
    // Recursive Javascript program to reverse an array  /* Function to reverse arr[] from start to end*/ function reverseArray(arr,start,end)  {   var temp = arr[start];   arr[start] = arr[end];   arr[end] = temp;    // Recursive Function calling   if (start+1
    PHP
     // Recursive PHP program to reverse an array /* Function to reverse $arr[] from $start to $end */ function reverseArray(&$arr, $start, $end) { if ($start>= $final) { retorn; } $temp = $arr[$inici]; $arr[$inici] = $arr[$final]; $arr[$end] = $temp; // Funció recursiva que crida reverseArray($arr, $start + 1, $end - 1); } /* Funció d'utilitat per imprimir una matriu */ function printArray(&$arr, $size) { per ($i = 0; $i< $size; $i++) { echo $arr[$i] . ' '; } echo '
    '; } // Driver function to test above functions $arr = array(1, 2, 3, 4, 5, 6); // To print original array  printArray($arr, 6); // Function calling  reverseArray($arr, 0, 5); echo 'Reversed array is' . '
    '; // To print the Reversed array  printArray($arr, 6); ?>>

    Sortida
    1 2 3 4 5 6 Reversed array is 6 5 4 3 2 1>
    • Complexitat temporal: O(n). La recursivitat passa per cada element una vegada, de manera que és lineal.
    • Complexitat de l'espai auxiliar: O (n) per a no in situ, O (log n) per a in situ (a causa de la pila de recursivitat).

    5. Pila inversa de matriu (no al lloc):

    • Empenyeu cada element de la matriu a una pila.
    • Extraieu elements de la pila per formar la matriu invertida.

    A continuació es mostra la implementació de l'enfocament anterior:

    C++
    #include ; #include ; #include ; void reverseArrayUsingStack(int arr[], int size) {  std::stack pila;  // Introduïu elements a la pila per a (int i = 0; i< size; i++) {  stack.push(arr[i]);  }  // Pop elements from the stack to reverse the array  for (int i = 0; i < size; i++) {  arr[i] = stack.top();  stack.pop();  } } int main() {  int arr[] = { 1, 2, 3, 4, 5 };  int size = sizeof(arr) / sizeof(arr[0]);  reverseArrayUsingStack(arr, size);  std::cout << 'Reversed Array: ';  for (int i = 0; i < size; i++) {  std::cout << arr[i] << ' ';  }  return 0; }>
    C
    #include ; #include ; #define MAX_SIZE 100 struct Stack {  int arr[MAX_SIZE];  int top; }; void push(struct Stack* stack, int element) {  if (stack->top == MAX_SIZE - 1) { printf('Stack Overflow
    ');  tornar;  } stack->arr[++stack->top] = element; } int pop(struct Stack* stack) { if (stack->top == -1) { printf('Stack Underflow
    ');  sortida (1);  } return stack->arr[pila->top--]; } void reverseArrayUsingStack(int arr[], int size) { struct Stack stack;  stack.top = -1;  // Introduïu elements a la pila per a (int i = 0; i< size; i++) {  push(&stack, arr[i]);  }  // Pop elements from the stack to reverse the array  for (int i = 0; i < size; i++) {  arr[i] = pop(&stack);  } } int main() {  int arr[] = { 1, 2, 3, 4, 5 };  int size = sizeof(arr) / sizeof(arr[0]);  reverseArrayUsingStack(arr, size);  printf('Reversed Array: ');  for (int i = 0; i < size; i++) {  printf('%d ', arr[i]);  }  return 0; }>
    Java
    /*package whatever //do not write package name here */ import java.util.Stack; public class ReverseArrayUsingStack {  public static void reverseArrayUsingStack(int[] arr)  {  Stack pila = nova pila ();  // Introduïu elements a la pila per a (int element : arr) { stack.push(element);  } // Extraieu elements de la pila per invertir la matriu (int i = 0; i< arr.length; i++) {  arr[i] = stack.pop();  }  }  public static void main(String[] args)  {  int[] arr = { 1, 2, 3, 4, 5 };  reverseArrayUsingStack(arr);  System.out.print('Reversed Array: ');  for (int element : arr) {  System.out.print(element + ' ');  }  } }>
    Python
    def reverse_array_using_stack(arr): stack = [] # Push elements onto the stack for element in arr: stack.append(element) # Pop elements from the stack to reverse the array for i in range(len(arr)): arr[i] = stack.pop() # Example usage: arr = [1, 2, 3, 4, 5] reverse_array_using_stack(arr) print('Reversed Array:', arr)>
    C#
    using System; using System.Collections.Generic; class Program {  static void ReverseArrayUsingStack(int[] arr)  {  Stack pila = pila nova ();  // Empènyer elements a la pila foreach(int element in arr) { stack.Push(element); } // Extraieu elements de la pila per invertir la matriu (int i = 0; i< arr.Length; i++) {  arr[i] = stack.Pop();  }  }  static void Main()  {  int[] arr = { 1, 2, 3, 4, 5 };  ReverseArrayUsingStack(arr);  Console.Write('Reversed Array: ');  foreach(int element in arr)  {  Console.Write(element + ' ');  }  } }>
    JavaScript
    function reverseArrayUsingStack(arr) {  let stack = [];    // Push elements onto the stack  for (let i = 0; i < arr.length; i++) {  stack.push(arr[i]);  }  // Pop elements from the stack to reverse the array  for (let i = 0; i < arr.length; i++) {  arr[i] = stack.pop();  } } // Example usage: let arr = [1, 2, 3, 4, 5]; reverseArrayUsingStack(arr); console.log('Reversed Array:', arr);>

    Sortida
    Reversed Array: 5 4 3 2 1>
    • Complexitat temporal: O(n)
      • Empènyer i treure cada element a/des de la pila requereix un temps lineal.
    • Complexitat de l'espai auxiliar: O(n)
      • S'utilitza espai addicional per emmagatzemar la pila.

    6. Enfocament de dos punters

    • Estableix l'inici a 0 i el final a la mida - 1.
    • Intercanvia els elements fins que els punters es troben: mentre l'inici és inferior al final, intercanvia arr[inici] amb arr[end].
    • Canvia arr[inici] amb arr[final].
    • Incrementar l'inici i disminuir el final.
    • Continueu intercanviant i movent els punters fins que acabin les creus inicials.
    C++
    #include  void reverseArrayTwoPointer(int arr[], int size) {  int start = 0;  int end = size - 1;  while (start < end) {  // Swap elements at start and end positions  int temp = arr[start];  arr[start] = arr[end];  arr[end] = temp;  // Move start forward and end backward  start++;  end--;  } } int main() {  int arr[] = { 1, 2, 3, 4, 5 };  int size = sizeof(arr) / sizeof(arr[0]);  reverseArrayTwoPointer(arr, size);  std::cout << 'Reversed Array: ';  for (int i = 0; i < size; i++) {  std::cout << arr[i] << ' ';  }  return 0; }>
    Java
    public class ReverseArray {    public static void reverseArrayTwoPointer(int[] arr) {  int start = 0;  int end = arr.length - 1;  while (start < end) {  // Swap elements at start and end positions  int temp = arr[start];  arr[start] = arr[end];  arr[end] = temp;  // Move start forward and end backward  start++;  end--;  }  }  public static void main(String[] args) {  int[] arr = { 1, 2, 3, 4, 5 };  reverseArrayTwoPointer(arr);  System.out.print('Reversed Array: ');  for (int i = 0; i < arr.length; i++) {  System.out.print(arr[i] + ' ');  }  } } // This code is contributed by Shivam>

    Sortida:

    Reversed Array: 5 4 3 2 1>

    Complexitat temporal: O(n) – Aquest algorisme itera a través de la matriu una vegada, realitzant un nombre constant d'operacions per a cada element, donant lloc a una complexitat de temps lineal.

    Complexitat espacial: O(1) - L'algorisme inverteix la matriu al seu lloc sense utilitzar cap estructura de dades addicional, per la qual cosa requereix espai constant independentment de la mida de la matriu d'entrada.