首页 > 解决方案 > 使用堆栈将零移动到末尾

问题描述

我尝试了一种蛮力的方式,我认为这肯定会奏效,但它给了我我没想到的数字。请任何建议将不胜感激。我的逻辑是我将所有 0 放在一个堆栈中,并将所有非零放在一个堆栈中。然后稍后将所有非零弹出到数组中,并将所有零弹出到数组中。我认为逻辑是有道理的。这是我的代码

class Solution {
    public void moveZeroes(int[] nums) {
        Stack<Integer> stack = new Stack<>();
        Stack<Integer> zeroStack = new Stack<>();
            int[] res = new int[nums.length];
            for(int i = nums.length-1; i>=0; i--) {
                if(nums[i] != 0) {
                    stack.push(nums[i]);
                }
                else{
                    zeroStack.push(nums[i]);
                }
            }
            int index = 0;
            while(stack.isEmpty()) {
                res[index++] = stack.pop();
            }
            while(zeroStack.isEmpty()){
                res[index++] = stack.pop();
            }

        for(int i = 0; i< nums.length; i++) {
            nums[i] = res[i];
        }

        }
    }

这里有什么问题?

标签: java

解决方案


 while (!stack.isEmpty()) {
            res[index++] = stack.pop();
        }
 while (!zeroStack.isEmpty()) {
            res[index++] = zeroStack.pop();
        }

以上是您有错误的部分,我给出了正确的代码。
1. 不应该使用!stack.isEmpty()2.stack.isEmpty()
应该使用 zeroStack 而不是再次堆叠

我的测试代码:

public static void main(String[] args) {
        int[] nums = new int[]{1,0,2,0,3,0};
        moveZeroes(nums);
        Arrays.stream(nums).forEach(System.out::print); // 123000
    }

    public static void moveZeroes(int[] nums) {
        Stack<Integer> stack = new Stack<>();
        Stack<Integer> zeroStack = new Stack<>();
        int[] res = new int[nums.length];
        for (int i = nums.length - 1; i >= 0; i--) {
            if (nums[i] != 0) {
                stack.push(nums[i]);
            } else {
                zeroStack.push(nums[i]);
            }
        }
        int index = 0;
        while (!stack.isEmpty()) {
            res[index++] = stack.pop();
        }
        while (!zeroStack.isEmpty()) {
            res[index++] = zeroStack.pop();
        }

        for (int i = 0; i < nums.length; i++) {
            nums[i] = res[i];
        }

    }

推荐阅读