539. 移动零

给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序

样例

例1:

1
2
输入: nums = [0, 1, 0, 3, 12],
输出: [1, 3, 12, 0, 0].

例2:

1
2
输入: nums = [0, 0, 0, 3, 1],
输出: [3, 1, 0, 0, 0].

注意事项

1.必须在原数组上操作 2.最小化操作数

解法

算法:双指针,简单粗暴。用两个指针 rightleftright用来右移数组,碰到不为0 的元素就赋值到 left指针处。时间复杂度:\(O(N)\)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// java solution
public class Solution {
public void moveZeroes(int[] nums) {
int right = 0;
int left = 0;
int length = nums.length;
while (right < length)
{
if (nums[right] != 0){
nums[left] = nums[right];
left += 1;
}
right += 1;
}
for(int i = left; i < length; i++) {
nums[i] = 0;
}
}
}