当前位置:网站首页>leetCode-1089: 复写零
leetCode-1089: 复写零
2022-06-24 09:43:00 【文丑颜不良啊】
题目描述
给你一个长度固定的整数数组 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 相同,变量 j 用来记录虚拟数组中的数组元素个数;
(2)使用指针 i 去遍历原数组 arr,如果 arr[i] != 0,则 i 和 j 同时自增 1,如果 arr[i] == 0,则此时便需要进行复写 0 的操作,所以 j 自增 2,i 自增 1,当 j >= arr.length 时停止遍历;
(3)此时 i 即为对原数组进行复写 0 操作之后会出现在虚拟数组中的最后一个元素的下标(注意理解);
(4)因为 j 表示虚拟数组中的元素个数,并不是下标,所以还需要对 j 进行自减 1 操作,需要特殊情况:当原数组 arr 的最后一个元素为 0 并且复写 0 之后 j > arr.length 了,则此时需要对 j 自减 2,同时给 arr[j] 赋值为 0,之后再进行一次 j 自减 1,i 自减 1 操作;
(5)之后从右到左进行复写 0 操作,如果 arr[i] == 0,则 arr[j] 和 arr[j - 1] 都赋值为 0,并进行 j 自减,2,i 自减 1 操作;如果 arr[i] != 0,则将当前 arr[i] 的值赋值给 arr[j],同时进行 i 和 j 的自减 1 即可
代码展示
public class DuplicateZeros {
public void duplicateZeros(int[] arr) {
// 虚拟数组, 找出会出现在虚拟数组中的最后一个元素, 即 i
int i = 0;
int j = 0;
for (; i < arr.length; i++) {
if (arr[i] == 0) {
j += 2;
} else {
j++;
}
if (j >= arr.length) {
break;
}
}
// 处理原数组中最后一个元素等于 0 且复写之后越界的特殊情况
if (j > arr.length) {
if (arr[i] == 0) {
j = j - 2;
arr[j] = 0;
j--;
i--;
}
} else {
j--;
}
//System.out.println("i = " + i + ", j = " + j);
// 从右到左, 进行复写操作
while (j >= 0) {
arr[j] = arr[i];
if (arr[i] == 0) {
arr[j - 1] = arr[i];
j--;
}
i--;
j--;
}
}
public static void main(String[] args) {
int[] arr = {
1,0,2,3,0,4,5,0};
new DuplicateZeros().duplicateZeros(arr);
}
}
边栏推荐
- The great charm of cookies
- 二叉树第一部分
- Symbol.iterator 迭代器
- MYSQL数据高级
- Network of test and development - Common Service Protocols
- PostgreSQL DBA quick start - source compilation and installation
- canvas无限扫描js特效代码
- 分布式 | 如何与 DBLE 进行“秘密通话”
- 416 binary tree (first, middle and last order traversal iteration method)
- tf.contrib.layers.batch_norm
猜你喜欢
随机推荐
Binary tree part I
Wechat cloud hosting launch public beta: in the appointment of the publicity meeting
学习使用KindEditor富文本编辑器,点击上传图片遮罩太大或白屏解决方案
为什么 JSX 语法这么香?
Error reading CSV (TSV) file
canvas 绘制图片
SSH Remote Password free login
SQL Server AVG函数取整问题
CICFlowMeter源码分析以及为满足需求而进行的修改
微信小程序rich-text图片宽高自适应的方法介绍(rich-text富文本)
解决微信小程序rich-text富文本标签内部图片宽高自适应的方法
Which of the top ten securities companies has the lowest Commission and is the safest and most reliable? Do you know anything
SQL Sever中的窗口函数row_number()rank()dense_rank()
GeoGebra 实例 时钟
Indexeddb local storage, homepage optimization
读取csv(tsv)文件出错
Cookie encryption 4 RPC method determines cookie encryption
如何在一个页面上使用多个KindEditor编辑器并将值传递到服务器端
小程序 rich-text中图片点击放大与自适应大小问题
PHP encapsulates a file upload class (supports single file and multiple file uploads)









