美文网首页
LeetCode:1089. 复写零

LeetCode:1089. 复写零

作者: alex很累 | 来源:发表于2022-06-17 16:24 被阅读0次

    问题链接

    1089. 复写零

    问题描述

    给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

    注意:请不要在超过该数组长度的位置写入元素。

    要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。

    示例

    示例1
    输入:[1,0,2,3,0,4,5,0]
    输出:null
    解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]
    

    解题思路

    如果不限制“就地”的话,可以直接用栈来解决这个问题。
    思路:统计0的个数后移位
    遍历一次数组,统计0的个数;再从后往前遍历一次,根据当前位置左边的0的个数移动当前整数的位置。

    代码示例(JAVA)

    class Solution {
        public void duplicateZeros(int[] arr) {
            // 统计0的个数
            int countZero = 0;
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == 0) {
                    countZero++;
                }
            }
            if (countZero == 0) {
                return;
            }
    
            // 循环中的countZero可理解为当前位置左边h还有多少个0
            for (int i = arr.length - 1; i >= 0 && countZero > 0; i--) {
                if (arr[i] == 0) {
                    countZero--;
                }
                if (i + countZero < arr.length) {
                    arr[i + countZero] = arr[i];
                    // 如果是0,复写
                    if (arr[i] == 0 && i + countZero + 1 < arr.length) {
                        arr[i + countZero + 1] = 0;
                    }
                }
            }
        }
    }
    

    执行结果

    相关文章

      网友评论

          本文标题:LeetCode:1089. 复写零

          本文链接:https://www.haomeiwen.com/subject/jdhfvrtx.html