题目描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
样例
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
算法分析
k
指针指向当前可以存着数字的位置,枚举整个数组,若当前数nums[i] != 0
,则将将该数填到k
位置中,并且k ++
,k
一定小于等于i
时间复杂度 $O(n)$
Java 代码
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length;
int k = 0;
for(int i = 0;i < n;i ++)
{
if(nums[i] != 0) nums[k ++] = nums[i];
}
for(int i = k;i < n;i ++) nums[i] = 0;
}
}