给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
if not nums:
return
n = len(nums)
zero_count = 0
for i in range(n):
if nums[i] == 0:
zero_count += 1
else:
nums[i - zero_count] = nums[i]
while zero_count > 0:
nums[n - zero_count] = 0
zero_count -= 1
class Solution {
public void moveZeroes(int[] nums) {
int n;
if (nums == null || (n = nums.length) < 1) {
return;
}
int zeroCount = 0;
for (int i = 0; i < n; ++i) {
if (nums[i] == 0) {
++zeroCount;
} else {
nums[i - zeroCount] = nums[i];
}
}
while (zeroCount > 0) {
nums[n - zeroCount--] = 0;
}
}
}
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function (nums) {
if (!nums.length) return nums;
let j = 0;
for (i = 0; i < nums.length; i++) {
if (nums[i]) {
if (i > j) [nums[i], nums[j]] = [nums[j], nums[i]];
j++;
}
}
return nums;
};