移动零

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

示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

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

方法一: 双指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public void moveZeroes(int[] nums) {
int count = 0;
for(int i = 0; i < nums.length; i++) {
if(nums[i] != 0) {
nums[count++] = nums[i];
}
}
while(count < nums.length) {
nums[count++] = 0;
}
}
}
var moveZeroes = function(nums) {
let count = 0;
for(let num of nums) {
if(num !== 0) {
nums[count++] = num
}
}
while(count < nums.length) {
nums[count++] = 0
}
};

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

执行结果:通过

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:38.5 MB, 在所有 Java 提交中击败了80.28%的用户