我是靠谱客的博主 坦率人生,这篇文章主要介绍移动零(Java的2种算法实现)移动零,现在分享给大家,希望可以做个参考。

移动零


题目

移动零(力扣:283)

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

分析

使用双指针解决。

方法一:用2个指针i指向当前遍历的节点,j指向已排好序的当前非零节点的后一位。i指针位置的当前节点,如果是非零,则交换i和j的位置。

方法二:第一次遍历将非零节点都移动到数组的前面,并计算出非零节点的数量s,完成遍历后,第二次遍历从s开始一直到数组末尾,设置为0即可。

代码实现:方法一

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/** * 283. 移动零 * @param nums */ public void moveZeroes(int[] nums) { if (nums == null){ return; } int i = 0, j = 0; int tmp; while (i <nums.length){ if (nums[i] != 0){ tmp = nums[j]; nums[j] = nums[i]; nums[i] = tmp; j++; } i++; } }

代码实现:方法二

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/** * 283. 移动零 * * @param nums */ public void moveZeroes2(int[] nums) { if (nums == null || nums.length <= 1) { return; } int s = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { nums[s] = nums[i]; s++; } } for (int i = s; i < nums.length; i++) { nums[i] = 0; } }

最后

以上就是坦率人生最近收集整理的关于移动零(Java的2种算法实现)移动零的全部内容,更多相关移动零(Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部