摘要:前言的复写零给你一个长度固定的整数数组,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意请不要在超过该数组长度的位置写入元素。
前言
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
前端LeetCode刷题 下面是已刷的题目的目录。GitHub:https://github.com/cunzaizhuy...每日打卡更新中,欢迎关注。 数组类 26 删除排序数组中的重复项 27 移除元素 35 搜索插入位置 66 加1 80 medium 删除排序数组中的重复项2 88 合并两个有序数组 167 两数之和II - 输入有序数组 118 杨辉三角 169 easy 求众数 1...
摘要:译者说于年月日发布,该版本正式支持的关键字,并且用旧版本编译同样可以使用这两个关键字,这无疑是一种进步。其次,这是最后一个支持和的版本了,在后续的版本了会移除对它们的兼容。本节最好直接在或者阅读,以获得更好的阅读体验格式支持。 译者说 Tornado 4.3于2015年11月6日发布,该版本正式支持Python3.5的async/await关键字,并且用旧版本CPython编译Torn...
阅读 1972·2021-11-08 13:14
阅读 2901·2021-10-18 13:34
阅读 1969·2021-09-23 11:21
阅读 3551·2019-08-30 15:54
阅读 1686·2019-08-30 15:54
阅读 2863·2019-08-29 15:33
阅读 2531·2019-08-29 14:01
阅读 1914·2019-08-29 13:52