📜  使用堆栈反转数组(1)

📅  最后修改于: 2023-12-03 15:06:55.770000             🧑  作者: Mango

使用堆栈反转数组

堆栈是一种数据结构,具有‘先入后出’的特点。用堆栈来反转数组的顺序可以非常便捷的实现。

实现思路
  1. 创建一个堆栈对象。
  2. 遍历数组,将元素依次入栈。
  3. 创建一个新的数组,并从堆栈中弹出元素,将弹出的元素按原来的顺序存入新的数组。
  4. 返回新的数组。
代码实现
public static int[] reverseArray(int[] arr) {
    Stack<Integer> stack = new Stack<>();
    for (int i = 0; i < arr.length; i++) {
        stack.push(arr[i]);
    }
    int[] reversedArr = new int[arr.length];
    int index = 0;
    while (!stack.isEmpty()) {
        reversedArr[index] = stack.pop();
        index++;
    }
    return reversedArr;
}
示例
int[] arr = {1, 2, 3, 4, 5};
int[] reversedArr = reverseArray(arr);
System.out.println(Arrays.toString(reversedArr)); // [5, 4, 3, 2, 1]
性能分析

时间复杂度:O(n),其中n为数组长度。遍历数组一次需要n的时间,堆栈的入栈和出栈都是O(1)的时间复杂度,所以总的时间复杂度为O(n)。

空间复杂度:O(n),需要一个堆栈对象和一个新的数组对象,所以空间复杂度为2n,即O(n)。

总体来说,使用堆栈反转数组是一种简单、易于理解的方法,时间和空间复杂度也非常优秀。