283. 移动零(Move Zeroes)
题目难度: 简单
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
1 | **输入:** `[0,1,0,3,12]` |
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
Solution
解题思路:
暴力解法。
从后往前遍历,当发现有0时,就其移动到最后,这个移动最后并不是仅仅将这个0和最后一个数字对调,而是将这个0之后所有的数字都往前挪一位。此法简单,暴力,时间复杂度较高,但是容易想到。代码如下:
Language: Java
1 | class Solution { |
将0过滤掉
从0开始遍历数组,维护一个指针pos用于表示当前非零数组的位置,维护一个指针i用于表示当前数组遍历的位置。
以[0,1,0,3,12]
为例,进行说明。
从0开始遍历数组,发现第一个数字为0,此时pos不做任何改变,仍然为0。
第二个数字为1,此时有nums[pos] = nums[i]
即nums[0] = nums[1]
,且pos++
,即此时pos=1;
到第三个数字又为0,此时又不做任何改变。
到第四个数字的时候,我们即又num[1] = num[3]
,且pos++
,即此时pos = 2.
如此我们就通过pos指针将数组中的0过滤掉了,最后我们添加相应的0到数组后面即可。
1 | class Solution { |