资讯专栏INFORMATION COLUMN

1089-复写零

pinecone / 1228人阅读

摘要:前言的复写零给你一个长度固定的整数数组,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意请不要在超过该数组长度的位置写入元素。

前言

Weekly Contest 141的 复写零:

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

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

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

示例1:

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

示例2:

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

提示:

1 <= arr.length <= 10000

0 <= arr[i] <= 9

解题思路

本题十分简单,需要注意本题是一个原地算法,所以使用双指针法进行变量交换即可。大致逻辑如下:

遍历数组元素

当前元素为0时,下一个元素赋值为0,并对数组进行左移,下一次遍历当前元素后2位的元素。否则正常遍历数组。

实现代码
    /**
     * 1089. 复写零
     * @param arr
     */
    public void duplicateZeros(int[] arr) {
        for (int i = 0; i < arr.length - 1;) {
            if (arr[i] == 0) {// 当前元素为0
                // 记录下一个元素的值
                int next = arr[i + 1];
                // 将下一个元素设为0
                arr[i + 1] = 0;
                for (int j = i + 2; j < arr.length; j++) { // 从当前索引后的第二个元素开始交换
                    int tmp = arr[j]; // 记录当前变量
                    arr[j] = next; // 将前一个位置的元素值赋给当前元素
                    next = tmp; // next指针记录当前元素
                }
                i+=2; // 下一次遍历的是当前元素后2位的元素
            }else{
                ++i; // 正常遍历
            }
        }
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77775.html

相关文章

  • 70道前端LeetCode题目集合及视频讲解(持续更新中...)

    前端LeetCode刷题 下面是已刷的题目的目录。GitHub:https://github.com/cunzaizhuy...每日打卡更新中,欢迎关注。 数组类 26 删除排序数组中的重复项 27 移除元素 35 搜索插入位置 66 加1 80 medium 删除排序数组中的重复项2 88 合并两个有序数组 167 两数之和II - 输入有序数组 118 杨辉三角 169 easy 求众数 1...

    mayaohua 评论0 收藏0
  • Tornado 4.3文档翻译: web框架-RequestHandler和Application

    摘要:译者说于年月日发布,该版本正式支持的关键字,并且用旧版本编译同样可以使用这两个关键字,这无疑是一种进步。其次,这是最后一个支持和的版本了,在后续的版本了会移除对它们的兼容。本节最好直接在或者阅读,以获得更好的阅读体验格式支持。 译者说 Tornado 4.3于2015年11月6日发布,该版本正式支持Python3.5的async/await关键字,并且用旧版本CPython编译Torn...

    xiongzenghui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<